Wie zu stoppen Doppel-Umwandlung in die wissenschaftliche Schreibweise, wenn mit einem stringstream
Mache ich ein Funktion geben Sie die Anzahl der Dezimalstellen und die gesamte Anzahl von Ziffern und bin Umwandlung der eingefügten typename
Zahl in eine Zeichenfolge mit sstream
s.
Jedoch ist die Anzahl bei der Konvertierung in ein string kommt in wissenschaftlichen Notationen, die nicht nützlich für das zählen der Anzahl der Ziffern, die sind in der normalen Zahl. Wie kann ich dies verhindern in meiner Funktion unten?
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;
}
- Beim posten von code bitte veröffentlichen Sie nur ein minimales Beispiel. Das ist viel zu viel.
- möglich, Duplikat der Verhindern, dass die wissenschaftliche notation in ostream bei der Verwendung von << mit Doppel
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden
std::fixed
stream manipulator wie:--
Beispiel,
Ausgabe:
Beispiel stammt aus dem hier.
Und Sie können
std::stringstream
stattcout
, aber das Ergebnis wäre dasselbe. Experimentieren Sie hier:http://www.ideone.com/HUrRw
precision(5)
.Müssen Sie stream-Manipulatoren formatieren den string wie du es haben willst. In Ihrem Fall, werden Sie wahrscheinlich wollen, verwenden Sie die
fixed
- format-flag :Das Gegenteil (wenn Sie jemals wollen, um Kraft wissenschaftliche notation) ist die
scientific
- format-flag :