GOOGLE ADS

Sonntag, 1. Mai 2022

Wie rundet man in Dart ein Double auf eine bestimmte Genauigkeit NACH dem Komma?

Bei einem Double möchte ich es auf eine bestimmte Anzahl von Genauigkeitspunkten nach dem Dezimalkomma runden, ähnlich der Funktion round() von PHP.

Das nächste, was ich in den Dart-Dokumenten finden kann, ist double.toStringAsPrecision(), aber das ist nicht ganz das, was ich brauche, weil es die Ziffern vor dem Dezimalkomma in den Gesamtpunkten der Genauigkeit enthält.

Verwenden Sie beispielsweise toStringAsPrecision(3):

0.123456789 rounds to 0.123 
9.123456789 rounds to 9.12
98.123456789 rounds to 98.1
987.123456789 rounds to 987
9876.123456789 rounds to 9.88e+3

Mit zunehmender Größe der Zahl verliere ich entsprechend die Genauigkeit nach der Kommastelle.


Lösung des Problems

Siehe die Dokumentation für num.toStringAsFixed().

String toStringAsFixed (int Bruchziffern)

Gibt eine Dezimalkomma-String-Darstellung davon zurück.

Konvertiert dies in ein Double, bevor die Zeichenfolgendarstellung berechnet wird.


  • Wenn der absolute Wert davon größer oder gleich 10^21 ist, gibt diese Methode eine Exponentialdarstellung zurück, die von this.toStringAsExponential() berechnet wird.


Beispiele:

1000000000000000000000.toStringAsExponential(3); // 1.000e+21


  • Andernfalls ist das Ergebnis die ähnlichste Zeichenfolgendarstellung mit genau bruchDigits Stellen nach dem Dezimalkomma. Wenn FraktionDigits gleich 0 ist, wird der Dezimalpunkt weggelassen.


Der Parameter fractionDigits muss eine Ganzzahl sein, die folgende Bedingungen erfüllt: 0 <= fractionDigits <= 20.

Beispiele:

1.toStringAsFixed(3); // 1.000
(4321.12345678).toStringAsFixed(3); // 4321.123
(4321.12345678).toStringAsFixed(5); // 4321.12346
123456789012345678901.toStringAsFixed(3); // 123456789012345683968.000
1000000000000000000000.toStringAsFixed(3); // 1e+21
5.25.toStringAsFixed(0); // 5

Keine Kommentare:

Kommentar veröffentlichen

Warum werden SCHED_FIFO-Threads derselben physischen CPU zugewiesen, obwohl CPUs im Leerlauf verfügbar sind?

Lösung des Problems Wenn ich das richtig verstehe, versuchen Sie, SCHED_FIFO mit aktiviertem Hyperthreading ("HT") zu verwenden, ...