Konvertieren von float in string mit Präzision & Anzahl der Nachkommastellen angegeben?
Wie rechnet man einen float in einen string in C++ unter Angabe der Präzision & Anzahl der Nachkommastellen)?
Beispiel: 3.14159265359 -> "3.14"
- warum nicht erstellen eine temp float mit der angegebenen Genauigkeit, die Sie wollen und konvertieren Sie Sie dann in string?
- Die 'temp float' doesn T haben ein "angegebene Genauigkeit" und es gibt Fälle, wenn eine solche Vorgehensweise brechen. Diese Frage ist im Grunde vergleichbar mit der Frage "was ist das äquivalent der '%.2f' - format"?
- Siehe stackoverflow.com/questions/14432043/c-float-formatting wenn dies ist, müssen nur für IO.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Typische Weg wäre, um
stringstream
:Sehen behoben
und setprecision.
Für Umbauten von technischen Zweck, wie die Speicherung von Daten im XML-oder JSON-Datei, C++17 definiert to_chars Familie von Funktionen.
Vorausgesetzt, ein konformer compiler (die wir Mangels zum Zeitpunkt des Schreibens),
so etwas kann in Betracht gezogen werden:
Die übliche Methode, das zu tun diese Art der Sache ist zu "print string". In C++ das bedeutet, dass mit
std::stringstream
etwas wie:Weitere option ist
snprintf
:Demo. Fehlerbehandlung sollte Hinzugefügt werden, D. H. der überprüfung der für
written < 0
.snprintf
besser in diesem Fall? Bitte erklären... Es wird sicherlich nicht schneller, erzeugen weniger code [ich habe geschrieben eine printf-Implementierung, es ist ziemlich kompakt bei knapp 2000 Zeilen code, aber mit makro-Erweiterungen wird auf rund 2500 Zeilen]__printf_fp
Funktionalität - es ist merkwürdig, dass es dauert so viel länger instringstream
, als es wirklich sollte nicht.stringstream
. Wenn Sie möchten, optimieren Sie die Leistung von VIELEN zahlen, dann gibt es wahrscheinlich besseres zu tun haben [wie z.B. das schreiben eines engagierten "floating point to string" - Funktion - es ist zwar nicht ganz trivial, wenn die zahlen haben eine sehr große Reichweite]Können Sie die
fmt::format
Funktion aus der {fmt} - Bibliothek:wo
2
ist, a Präzision.Diese Formatierung Anlage wurde vorgeschlagen, für die Standardisierung in C++: P0645. Beide P0645 und {fmt} verwenden Sie eine Python-ähnlichen format-string-syntax, die ähnlich ist zu
printf
's, sondern verwendet{}
als Trennzeichen statt%
.Hier bin ich Bereitstellung einer negativ-Beispiel, wo Sie wollen, um zu vermeiden, wenn die Umwandlung schwebender Anzahl an Saiten.
Erhalten Sie
Hinweis: die num-variable kann einen beliebigen Wert in der Nähe 99.463, erhalten Sie das gleiche ausdrucken. Der Punkt ist, zu vermeiden, die praktische c++11 "to_string" - Funktion. Es dauerte eine Weile, um aus dieser Falle. Der beste Weg ist die stringstream-und sprintf Methoden (C-Sprache). C++11 oder höher versehen werden sollte ein zweiter parameter, wie die Anzahl der Ziffern nach dem floating-point zu zeigen. Jetzt der Standardwert ist 6. Ich bin postulieren diese, so dass andere nicht wast Zeit zu diesem Thema.
Schrieb ich meine erste version, bitte lassen Sie mich wissen, wenn Sie einen Fehler, der behoben werden muss. Sie können Steuern, das genaue Verhalten mit der iomanipulator. Meine Funktion, die die Anzahl der Ziffern nach dem Dezimalpunkt.