Comment arrêter le double de la convertissage en notation scientifique lors de l'utilisation d'un calendrier

StackOverflow https://stackoverflow.com/questions/6010838

Question

Je fais une fonction pour retourner le nombre de chiffres décimaux et entiers et je convertit l'insertion typename Numéro à une chaîne en utilisant sstreams.

Cependant, le nombre lorsqu'il est converti en une chaîne sort en notations scientifiques, ce qui n'est pas utile pour compter le nombre de chiffres est dans le nombre normal. Comment puis-je empêcher cela de se produire dans ma fonction ci-dessous?

enum { DECIMALS = 10, WHOLE_NUMBS = 20, ALL = 30 };

template < typename T > int Numbs_Digits(T numb, int scope)
{
    stringstream ss(stringstream::in | stringstream::out);
    stringstream ss2(stringstream::in | stringstream::out);
    unsigned long int length = 0;
    unsigned long int numb_wholes;

    ss2 << (int) numb;
    numb_wholes = ss2.str().length();
    ss2.flush();
    bool all = false;

    switch (scope) {
    case ALL:
        all = true;

    case DECIMALS:
        ss << numb;
        length += ss.str().length() - (numb_wholes + 1);  // +1 for the "."
        if (all != true)
            break;

    case WHOLE_NUMBS:
        length += numb_wholes;
        if (all != true)
            break;

    default:
        break;
    }
    return length;
}
Était-ce utile?

La solution

Utilisation std::fixed Stream Manipulateur comme:

ss << fixed << numb;

--

Exemple,

#include <iostream>
using namespace std;

int main () {
  double a,b,c;
  a = 3.1415926534;
  b = 2006.0;
  c = 1.0e-10;
  cout.precision(5);
  cout       <<         a << '\t' << b << '\t' << c << endl;
  cout <<   fixed    << a << '\t' << b << '\t' << c << endl;
  cout << scientific << a << '\t' << b << '\t' << c << endl;
  return 0;
}

Production:

3.1416          2006            1e-010
3.14159         2006.00000      0.00000
3.14159e+000    2.00600e+003    1.00000e-010

L'exemple est pris de ici.

Et vous pouvez utiliser std::stringstream à la place de cout, mais le résultat serait le même. Expérimentez-le ici:

http://www.ideone.com/hurrw

Autres conseils

Vous devez utiliser manipuler les manipulateurs Pour formater la chaîne comme vous le souhaitez. Dans votre cas, vous voudrez probablement utiliser le fixed Format drapeau:

ss << std::fixed << numb;

Le contraire (si jamais vous voulez Obliger notation scientifique) est le scientific Format drapeau:

ss << std::scientific << numb;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top