Limit-floating-point-Präzision?
Gibt es eine Möglichkeit, Runde schwimmende Punkte 2 Punkte? E. g.: 3576.7675745342556
wird 3576.76
.
- Meinst du für die Anzeige oder Berechnung?
- 3576.7675745342556 wird 3576.77, nicht wahr?
- Nicht nesacerily. Rundung ist eine vage Bezeichnung, kapselt verschiedene Vorgänge, die genauere Bedeutung. Runde Aufwärts - /Abwärts-Richtung Null/Richtung Unendlichkeit/Richtung nächste int etc.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie müssen halten, was schwimmt:
Flexible version mit standard-Bibliothek-Funktionen:
Wenn Sie drucken Sie es aus, verwenden Sie stattdessen was auch immer drucken formatieren-Funktion zur Verfügung.
In c++
Zur Rundung zum Rendern der GUI, Nutzung von std::ostringstream
floor
oderceil
kann verwendet werden, statt einem integer casten.printf
?printf("%.2f", f);
.Multipliziert mit 100, Runden auf ganze Zahl (wie man will), teilen durch 100. Beachten Sie, dass seit 1/100 dargestellt werden können gerade im floating-point -, überlegen Sie, ob Sie mit fester Genauigkeit Ganzzahlen.
Für diejenigen von Euch googeln format float zu Geld, wie ich war:
Müssen Sie als string zurückgeben. Setzen Sie es wieder in einen float verlieren die Präzision.
Nicht verwenden schwimmt. Verwenden Sie Ganzzahlen speichern der Anzahl von Cent, und drucken Sie ein Dezimaltrennzeichen vor die letzten 2 Plätze, wenn Sie möchten, drucken Dollar. Floats sind fast immer falsch für Geld, es sei denn, du machst das vereinfachte Berechnungen (wie naiv Wirtschafts-mathematische Modelle), wo nur die Größenordnung der zahlen, die wirklich zählt, und Sie nie abziehen, in der Nähe zahlen.
versuchen,
std::cout<<std::setprecision(2)<<std::cout<<x;
sollte funktioniert und nur 2 Ziffern nach dem floating-point angezeigt.
Zur Begrenzung der Präzision:
Wenn x ist ein float, kein Verrunden:
(Hochschalten von 2 Dezimalstellen, Streifen der Bruch, die Verschiebung nach unten von 2 Dezimalstellen)
Float w/Rundung:
Doppel-w/o-Rundung:
Doppel-w/Rundung:
Hinweis: Da es sich bei x ist entweder eine
float
oder einedouble
, der gebrochene Teil wird immer da sein. Es ist der Unterschied zwischen dem, wie ein # dargestellt (IEEE 754) und die #'s Genauigkeit.C99 unterstützt Runde()
Versuchen Sie dieses, es funktioniert perfekt
ändern, einige Objekte zu sehen und zu lernen der code.