Wie konvertiert man einen Float in eine Zeichenfolge in C ++, während man die Genauigkeit und Anzahl der Dezimalstellen angibt?
Beispielsweise: 3.14159265359 -> "3.14"
c++
string
floating-point
Shannon Matthews
quelle
quelle
Antworten:
Ein typischer Weg wäre zu verwenden
stringstream
:Siehe behoben
und setprecision .
Für Konvertierungen von technischen Zwecken wie das Speichern von Daten in XML- oder JSON-Dateien definiert C ++ 17 die Funktionsfamilie to_chars .
Unter der Annahme eines kompatiblen Compilers (der uns zum Zeitpunkt des Schreibens fehlt) kann Folgendes in Betracht gezogen werden:
quelle
Die übliche Methode, um so etwas zu tun, ist "Print to String". In C ++ bedeutet das
std::stringstream
Folgendes:quelle
Eine weitere Option ist
snprintf
:Demo . Fehlerbehandlung sollte hinzugefügt werden, dh nach prüfen
written < 0
.quelle
snprintf
es in diesem Fall besser? Bitte erklären Sie ... Es wird sicherlich nicht schneller sein, weniger Code produzieren [Ich habe eine printf-Implementierung geschrieben, es ist ziemlich kompakt mit knapp 2000 Codezeilen, aber mit Makroerweiterungen werden es ungefähr 2500 Zeilen]__printf_fp
Funktionalität verwenden - es ist ziemlich seltsam, dass es so viel länger dauertstringstream
, als es eigentlich nicht sein sollte.Sie können die
fmt::format
Funktion aus der {fmt} -Bibliothek verwenden :Wo
2
ist eine Präzision.Diese Formatierungsfunktion wurde zur Standardisierung in C ++: P0645 vorgeschlagen . Sowohl P0645 als auch {fmt} verwenden eine Python-ähnliche String-Syntax, die der von
printf
's ähnelt, jedoch{}
anstelle von Trennzeichen verwendet wird%
.quelle
Hier eine Lösung mit nur std. Beachten Sie jedoch, dass dies nur abrundet.
Denn
rounded
es ergibt:Der Code konvertiert den gesamten Float in einen String, schneidet jedoch alle Zeichen 2 Zeichen nach dem "."
quelle
number + 0.005
in meinem Fall.Hier gebe ich ein negatives Beispiel, bei dem Sie vermeiden möchten, wenn Sie eine schwebende Zahl in Zeichenfolgen konvertieren.
Du erhältst
Hinweis: Die Variable num kann ein beliebiger Wert nahe 99,463 sein. Sie erhalten den gleichen Ausdruck. Der Punkt ist, die bequeme c ++ 11 "to_string" -Funktion zu vermeiden. Ich habe eine Weile gebraucht, um diese Falle zu überwinden. Der beste Weg ist die Stringstream- und Sprintf-Methode (C-Sprache). C ++ 11 oder neuer sollte einen zweiten Parameter als Anzahl der Stellen nach dem anzuzeigenden Gleitkomma bereitstellen. Im Moment ist die Standardeinstellung 6. Ich setze dies so, dass andere keine Zeit mit diesem Thema verschwenden.
Ich habe meine erste Version geschrieben. Bitte lassen Sie mich wissen, wenn Sie einen Fehler finden, der behoben werden muss. Sie können das genaue Verhalten mit dem Iomanipulator steuern. Meine Funktion besteht darin, die Anzahl der Stellen nach dem Dezimalpunkt anzuzeigen.
quelle