Comment arrêter le double de la convertissage en notation scientifique lors de l'utilisation d'un calendrier
-
14-11-2019 - |
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 sstream
s.
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;
}
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:
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;