Ich möchte höchstens 2 Dezimalstellen runden, aber nur bei Bedarf .
Eingang:
10
1.7777777
9.1
Ausgabe:
10
1.78
9.1
Wie kann ich das in JavaScript machen?
javascript
rounding
decimal-point
stinkycheeseman
quelle
quelle
Number.EPSILON
. Verwenden SieMath.round( num * 100 + Number.EPSILON ) / 100
.Number.EPSILON
?Antworten:
Verwenden
Math.round(num * 100) / 100
Bearbeiten: Um sicherzustellen, dass Dinge wie 1.005 richtig sind, verwenden wir
Math.round((num + Number.EPSILON) * 100) / 100
quelle
Math.round((num + 0.00001) * 100) / 100
. Versuchen SieMath.round((1.005 + 0.00001) * 100) / 100
undMath.round((1.0049 + 0.00001) * 100) / 100
Wenn der Wert ein Texttyp ist:
Wenn der Wert eine Zahl ist:
Es gibt einen Nachteil, dass Werte wie 1,5 "1,50" als Ausgabe ergeben. Ein von @minitech vorgeschlagener Fix:
Es scheint
Math.round
eine bessere Lösung zu sein. Aber es ist nicht! In einigen Fällen wird es NICHT richtig gerundet:toFixed () rundet in einigen Fällen auch NICHT richtig (getestet in Chrome v.55.0.2883.87)!
Beispiele:
Ich denke, das liegt daran, dass 1.555 tatsächlich so etwas wie Float 1.55499994 hinter den Kulissen ist.
Lösung 1 besteht darin, ein Skript mit dem erforderlichen Rundungsalgorithmus zu verwenden, zum Beispiel:
https://plnkr.co/edit/uau8BlS1cqbvWPCHJeOy?p=preview
HINWEIS: Dies ist keine universelle Lösung für alle. Es gibt verschiedene Rundungsalgorithmen. Ihre Implementierung kann je nach Ihren Anforderungen unterschiedlich sein. https://en.wikipedia.org/wiki/Rounding
Lösung 2 besteht darin, Front-End-Berechnungen zu vermeiden und gerundete Werte vom Back-End-Server abzurufen.
quelle
parseFloat(number.toFixed(decimalPlaces));
@PerLundbergparseFloat("55.555").toFixed(2)
kehrt"55.55"
in der Chrome-Entwicklungskonsole zurück.Sie können verwenden
Ich fand das vorbei MDN gefunden . Ihr Weg vermeidet das erwähnte Problem mit 1.005 .
quelle
+(val)
ist das Zwangsäquivalent zur VerwendungNumber(val)
. Das Verketten von "e-2" mit einer Zahl führte zu einer Zeichenfolge, die wieder in eine Zahl umgewandelt werden musste.roundToTwo(1.0049999999999999)
(seitdem1.0049999999999999 == 1.005
) zwangsläufig 1.01 angezeigt . Es scheint mir, dass der Float, den Sie erhalten, wenn Sienum = 1.005
"offensichtlich" eingeben, auf 1,00 runden sollte, da der genaue Wert von num weniger als 1,005 beträgt. Natürlich scheint es mir auch, dass die Zeichenfolge '1.005' 'offensichtlich' 'auf 1.01 gerundet werden sollte. Die Tatsache, dass verschiedene Menschen unterschiedliche Intuitionen darüber zu haben scheinen, was das tatsächliche richtige Verhalten hier ist, ist ein Teil dessen, warum es kompliziert ist.1.0049999999999999
und1.005
per Definition sind sie also dieselbe Zahl. Dies wird als Dedekind-Schnitt bezeichnet.1.00499 < 1.005
isttrue
,1.0049999999999999 < 1.005
bewertet zufalse
.MarkGs Antwort ist die richtige. Hier ist eine generische Erweiterung für eine beliebige Anzahl von Dezimalstellen.
Verwendungszweck:
Gerätetest:
quelle
function round(number, decimals) { return +(Math.round(number + "e+" + decimals) + "e-" + decimals); }
(-1.005).round(2) === -1
Du solltest benutzen:
Niemand scheint sich dessen bewusst zu sein
Number.EPSILON
.Es ist auch erwähnenswert, dass dies keine JavaScript-Verrücktheit ist, wie einige Leute sagten.
So funktionieren Gleitkommazahlen in einem Computer einfach. Wie 99% der Programmiersprachen verfügt JavaScript nicht über hausgemachte Gleitkommazahlen. Dafür ist die CPU / FPU erforderlich. Ein Computer verwendet Binärdateien, und in Binärdateien gibt es keine Zahlen wie
0.1
, sondern nur eine binäre Näherung dafür. Warum? Aus dem gleichen Grund kann 1/3 nicht dezimal geschrieben werden: Der Wert ist 0,33333333 ... mit einer Unendlichkeit von drei.Hier komm
Number.EPSILON
. Diese Zahl ist die Differenz zwischen 1 und der nächsten Zahl, die in den Gleitkommazahlen mit doppelter Genauigkeit vorhanden ist. Das war's: Es gibt keine Zahl zwischen1
und 1 +Number.EPSILON
.BEARBEITEN:
Lassen Sie uns, wie in den Kommentaren gefragt, eines klarstellen: Hinzufügen
Number.EPSILON
ist nur relevant, wenn der zu runde Wert das Ergebnis einer arithmetischen Operation ist, da es ein Gleitkomma-Fehlerdelta verschlucken kann.Dies ist nicht sinnvoll, wenn der Wert aus einer direkten Quelle stammt (z. B. Literal, Benutzereingabe oder Sensor).
EDIT (2019):
Wie @maganap und einige Leute bereits betont haben, ist es am besten,
Number.EPSILON
vor dem Multiplizieren Folgendes hinzuzufügen :EDIT (Dezember 2019):
In letzter Zeit verwende ich eine ähnliche Funktion zum Vergleichen von epsilon-fähigen Zahlen:
Mein Anwendungsfall ist eine Behauptung + Datenvalidierungsbibliothek, die ich seit vielen Jahren entwickle.
In dem Code, den ich verwende,
ESPILON_RATE = 1 + 4 * Number.EPSILON
undEPSILON_ZERO = 4 * Number.MIN_VALUE
(viermal das Epsilon), weil ich möchte, dass ein Gleichheitsprüfer locker genug ist, um Gleitkommafehler zu kumulieren.Bisher sieht es für mich perfekt aus. Ich hoffe es wird helfen.
quelle
Math.round( (num + Number.EPSILON) * 100) / 100
. Ich stimme auch zu, dass dies die richtige Methode zum korrekten Runden ist (obwohl es nicht genau das ist, was in dieser Frage gestellt wurde).0.004999999999999999
das Ergebnis eines zusammengesetzten Gleitkommafehlers und das mathematisch korrekte Ergebnis war wahrscheinlich 0,005. Wenn es ein Messwert von einem Sensor ist? Nicht so viel.Math.round(1.5)
= 2, aberMath.round(-1.5)
= -1. Das ist also vollkommen konsistent. Hier ist -1 größer als -2, genau wie -1000 größer als -1000,01 ist. Nicht zu verwechseln mit größer absoluten Zahlen.Man kann verwenden
.toFixed(NumberOfDecimalPlaces)
.quelle
+(1.005).toFixed(2)
welche Renditen1
statt1.01
.Number(9).toFixed(2).replace(/0+$/, '')
=> "9."Diese Frage ist kompliziert.
Angenommen, wir haben eine Funktion,
roundTo2DP(num)
die ein Gleitkomma als Argument verwendet und einen auf 2 Dezimalstellen gerundeten Wert zurückgibt. Wofür sollte jeder dieser Ausdrücke ausgewertet werden?roundTo2DP(0.014999999999999999)
roundTo2DP(0.0150000000000000001)
roundTo2DP(0.015)
Die 'offensichtliche' Antwort ist, dass das erste Beispiel auf 0,01 runden sollte (weil es näher an 0,01 als an 0,02 liegt), während die anderen beiden auf 0,02 runden sollten (weil 0,0150000000000000001 näher an 0,02 als an 0,01 liegt und weil 0,015 genau in der Mitte liegt sie und es gibt eine mathematische Konvention, dass solche Zahlen aufgerundet werden).
Der Haken, den Sie vielleicht erraten haben, ist, dass er
roundTo2DP
möglicherweise nicht implementiert werden kann, um diese offensichtlichen Antworten zu geben, da alle drei an ihn übergebenen Zahlen dieselbe Zahl sind . IEEE 754-Binärgleitkommazahlen (die von JavaScript verwendete Art) können die meisten nicht ganzzahligen Zahlen nicht genau darstellen. Daher werden alle drei oben genannten numerischen Literale auf eine nahegelegene gültige Gleitkommazahl gerundet. Diese Zahl ist zufällig genau0.01499999999999999944488848768742172978818416595458984375
das ist näher an 0,01 als an 0,02.
Sie können sehen, dass alle drei Zahlen in Ihrer Browserkonsole, Node-Shell oder einem anderen JavaScript-Interpreter gleich sind. Vergleichen Sie sie einfach:
Wenn ich also schreibe
m = 0.0150000000000000001
, ist der genaue Wertm
, mit dem ich ende, näher0.01
als er ist0.02
. Und doch, wenn ichm
in einen String konvertiere ...... Ich bekomme 0,015, was auf 0,02 runden sollte und was merklich nicht die 56-Dezimalstellen-Zahl ist, von der ich zuvor gesagt habe, dass alle diese Zahlen genau gleich sind. Was für eine dunkle Magie ist das?
Die Antwort finden Sie in der ECMAScript-Spezifikation in Abschnitt 7.1.12.1: ToString, angewendet auf den Nummerntyp . Hier werden die Regeln für die Konvertierung einer Zahl m in einen String festgelegt. Der Schlüsselteil ist Punkt 5, in dem eine ganze Zahl s erzeugt wird, deren Ziffern in der String-Darstellung von m verwendet werden :
Der Schlüsselteil hier ist die Anforderung, dass " k so klein wie möglich ist". Was die Forderung beläuft sich auf eine Anforderung , dass eine Nummer
m
, den WertString(m)
muss eine möglichst geringe Anzahl von Stellen , während immer noch die Anforderung erfüllt , dassNumber(String(m)) === m
. Da wir das bereits wissen0.015 === 0.0150000000000000001
, ist jetzt klar, warumString(0.0150000000000000001) === '0.015'
das wahr sein muss.Natürlich hat keine dieser Diskussionen direkt beantwortet, was zurückkehren
roundTo2DP(m)
sollte . Wennm
der genaue Wert 0.01499999999999999944488848768742172978818416595458984375 ist, die Zeichenfolgendarstellung jedoch '0.015' lautet, was ist dann die richtige Antwort - mathematisch, praktisch, philosophisch oder was auch immer -, wenn wir sie auf zwei Dezimalstellen runden?Darauf gibt es keine einzige richtige Antwort. Dies hängt von Ihrem Anwendungsfall ab. Sie möchten wahrscheinlich die Zeichenfolgendarstellung respektieren und nach oben runden, wenn:
Auf der anderen Seite möchten Sie wahrscheinlich den binären Gleitkommawert berücksichtigen und nach unten runden, wenn Ihr Wert von einer inhärent kontinuierlichen Skala stammt - beispielsweise wenn es sich um einen Messwert von einem Sensor handelt.
Diese beiden Ansätze erfordern unterschiedlichen Code. Um die String-Darstellung der Zahl zu respektieren, können wir (mit ziemlich viel subtilem Code) unsere eigene Rundung implementieren, die direkt auf die String-Darstellung wirkt, Ziffer für Ziffer, wobei wir denselben Algorithmus verwenden, den Sie in der Schule verwendet hätten, als Sie wurden gelehrt, wie man Zahlen rundet. Im Folgenden finden Sie ein Beispiel, das die Anforderung des OP berücksichtigt, die Zahl "nur bei Bedarf" auf 2 Dezimalstellen darzustellen, indem nach dem Dezimalpunkt nachgestellte Nullen entfernt werden. Möglicherweise müssen Sie es natürlich an Ihre genauen Bedürfnisse anpassen.
Anwendungsbeispiel:
Die obige Funktion ist wahrscheinlich die, die Sie verwenden möchten, um zu vermeiden, dass Benutzer jemals feststellen, dass eingegebene Zahlen falsch gerundet werden.
(Alternativ können Sie auch die round10- Bibliothek ausprobieren, die eine ähnlich verhaltende Funktion mit einer völlig anderen Implementierung bietet.)
Aber was ist, wenn Sie die zweite Art von Zahl haben - einen Wert aus einer kontinuierlichen Skala, bei der es keinen Grund zu der Annahme gibt, dass ungefähre Dezimaldarstellungen mit weniger Dezimalstellen genauer sind als solche mit mehr? In diesem Fall möchten wir die String-Darstellung nicht berücksichtigen, da diese Darstellung (wie in der Spezifikation erläutert) bereits gerundet ist. Wir wollen nicht den Fehler machen, zu sagen "0.014999999 ... 375 rundet auf 0.015, was auf 0.02 rundet, also 0.014999999 ... 375 rundet auf 0.02".
Hier können wir einfach die eingebaute
toFixed
Methode verwenden. Beachten Sie, dass wir durch AufrufenNumber()
des vontoFixed
zurückgegebenen Strings eine Zahl erhalten, deren String-Darstellung keine nachgestellten Nullen enthält (dank der Art und Weise, wie JavaScript die String-Darstellung einer Zahl berechnet, die weiter oben in dieser Antwort erläutert wurde).quelle
roundStringNumberWithoutTrailingZeroes(362.42499999999995, 2)
. Erwartetes Ergebnis (wie in PHPecho round(362.42499999999995, 2)
) :362.43
. Tatsächliches Ergebnis:362.42
round
PHPs 362,43 geben. Das scheint intuitiv falsch zu sein, da 362.42499999999995 weniger als 362.425 ist (in Mathematik und Code -362.42499999999995 < 362.425
gilt sowohl für JS als auch für PHP). Die Antwort von PHP minimiert auch nicht den Abstand zwischen der ursprünglichen und der gerundeten Gleitkommazahl, da362.43 - 362.42499999999995 > 362.42499999999995 - 362.42
. Nach php.net/manual/en/function.round.php , PHPround
folgt dem C99 - Standard; Ich muss mich in das Land C wagen, um zu verstehen, was los ist.Betrachten Sie
.toFixed()
und.toPrecision()
:http://www.javascriptkit.com/javatutors/formatnumber.shtml
quelle
Eine präzise Rundungsmethode. Quelle: Mozilla
Beispiele:
quelle
Math.round10(3544.5249, -2)
Nein , gibt 3544,52 statt 3544,53 zurück3544.5249
an 2 Dezimalstellen ist3544.52
(Fehler = 0,0049). Wenn dies3544.53
der Fall wäre, wäre der Fehler 0,0051. Sie führen eine sukzessive Rundung durch, dh Math.round10 (Math.round10 (3544.5249, -3), -2), was einen größeren Rundungsfehler ergibt und daher nicht wünschenswert ist.number += 0.00011
Math.round10( Math.round10(3544.5249, -3) , -2)
Keine der hier gefundenen Antworten ist richtig . @stinkycheeseman gebeten, runden , Sie alle Zahl gerundet.
Verwenden Sie zum Aufrunden Folgendes:
quelle
Math.ceil(1.1 * 100)/100;
- es kehrt zurück1.11
, da 1.1 * 100110.00000000000001
laut brandneuen modernen Browsern Firefox, Chrome, Safari und Opera ... IE, in alter Mode, immer noch denkt1.1*100=1100
.Math.ceil(num.toFixed(4) * 100) / 100
Math.ceil((1.1).toFixed(4) * 100) / 100
wird auch1.11
in Firefox zurückkehren, das Problem / der Fehler moderner Browser liegt in der Multiplikation und die Leute sollten darüber Bescheid wissen (ich habe damals zum Beispiel an einem Lotteriespiel gearbeitet).Hier ist eine einfache Möglichkeit, dies zu tun:
Möglicherweise möchten Sie jedoch eine separate Funktion erstellen, um dies für Sie zu tun:
Dann würden Sie einfach den Wert übergeben.
Sie können es auf eine beliebige Anzahl von Dezimalstellen runden, indem Sie einen zweiten Parameter hinzufügen.
quelle
quelle
+(0.015).toFixed(2) == 0.01
.Für mich gab Math.round () keine richtige Antwort. Ich fand, dass Fixed (2) besser funktioniert. Nachfolgend finden Sie Beispiele für beides:
quelle
1.005
.(1.005).toFixed(2)
ergibt sich noch zu1.00
.Verwenden Sie diese Funktion
Number(x).toFixed(2);
quelle
Number
erneut ein, wenn Sie nicht möchten, dass es als Zeichenfolge zurückgegeben wird:Number(Number(x).toFixed(2));
Number
Anruf ist nicht notwendig,x.toFixed(2)
funktioniert.(1).toFixed(2)
zurückgegeben1.00
,1
in diesem Fall wird jedoch ein Fragesteller benötigt .1.005.toFixed(2)
gibt nach,"1"
wann es sein sollte"1.01"
.2017
Verwenden Sie einfach nativen Code
.toFixed()
Wenn Sie streng sein und bei Bedarf Ziffern hinzufügen müssen, kann dies verwendet werden
replace
quelle
toFixed
durch mehrere Antworten Jahre vor Ihrer vorgeschlagen, sondern erfüllt auch nicht die Bedingung "nur wenn erforderlich" in der Frage.(1).toFixed(2)
gibt an,"1.00"
wo der Fragesteller es wünscht"1"
.Probieren Sie diese leichte Lösung aus:
quelle
return Number(x.toFixed(digits))
?.toFixed()
sowieso nur Zahlen erlaubt sind.round(1.005, 2)
Sie, ein Ergebnis von1
statt zu sehen1.01
.round(0.995, 2) => 0.99
;round(1.006, 2) => 1.01
;;round(1.005, 2) => 1
Es gibt verschiedene Möglichkeiten, dies zu tun. Für Leute wie mich die Lodash-Variante
Verwendungszweck:
Wenn Ihr Projekt jQuery oder lodash verwendet, finden Sie die richtige
round
Methode auch in den Bibliotheken.Update 1
Ich habe die Variante entfernt
n.toFixed(2)
, weil sie nicht korrekt ist. Vielen Dank an avalanche1quelle
Number.toFixed()
gibt eine Zeichenfolge zurück, aber mit einem Pluszeichen davor konvertiert der JS-Interpreter die Zeichenfolge in eine Zahl. Dies ist eine Syntax Zucker.alert((+1234).toFixed(2))
Zeigt in Firefox "1234.00" an.alert(+1234.toFixed(2))
wirftSyntaxError: identifier starts immediately after numeric literal
. Ich bleibe bei der 1. Option.362.42499999999995
. Erwartetes Ergebnis (wie in PHPecho round(362.42499999999995, 2)
) :362.43
. Tatsächliches Ergebnis:362.42
Wenn Sie die lodash-Bibliothek verwenden, können Sie die runde Methode von lodash wie folgt verwenden.
Z.B:
quelle
Seit ES6 gibt es eine "richtige" Möglichkeit (ohne Statik zu überschreiben und Problemumgehungen zu erstellen), dies mithilfe von toPrecision zu tun
dann können Sie einfach
parseFloat
und Nullen werden "verschwinden".Das '1.005-Rundungsproblem' wird dadurch jedoch nicht gelöst, da es wesentlich dazu beiträgt, wie Float-Brüche verarbeitet werden .
Wenn Sie für Bibliotheken geöffnet sind, können Sie bignumber.js verwenden
quelle
(1.005).toPrecision(3)
kehrt immer noch1.00
statt1.01
tatsächlich zurück.toPrecision
Gibt eine Zeichenfolge zurück, die den gewünschten Ausgabetyp ändert..toPrecision
Methodenfehler, es ist eine Spezifität von Gleitkommazahlen (welche Zahlen in JS sind) - versuchen Sie1.005 - 0.005
, es wird zurückgegeben0.9999999999999999
.(1).toPrecision(3)
gibt '1.00' zurück, aber der Fragesteller wollte1
in diesem Fall haben.toPrecision
tut das Format, nicht das letztere, und ist keine Antwort auf die Frage des OP, obwohl es auf den ersten Blick relevant erscheinen mag, wird es viel falsch. Siehe en.wikipedia.org/wiki/Significant_figures . Zum BeispielNumber(123.4).toPrecision(2)
kehrt zurück"1.2e+2"
undNumber(12.345).toPrecision(2)
kehrt zurück"12"
. Ich würde auch @ adamdurens Argument zustimmen, dass es eine Zeichenfolge zurückgibt, die nicht wünschenswert ist (kein großes Problem, aber nicht wünschenswert).MarkG und Lavamantis boten eine viel bessere Lösung als die akzeptierte. Es ist eine Schande, dass sie nicht mehr positive Stimmen bekommen!
Hier ist die Funktion, mit der ich die Gleitkomma-Dezimalstellen-Probleme löse, die auch auf MDN basieren . Es ist noch allgemeiner (aber weniger prägnant) als die Lösung von Lavamantis:
Verwenden Sie es mit:
Im Vergleich zu Lavamantis 'Lösung können wir ...
quelle
Dies kann Ihnen helfen:
Weitere Informationen finden Sie unter diesem Link
Math.round (num) vs num.toFixed (0) und Browser-Inkonsistenzen
quelle
Der einfachste Ansatz wäre, toFixed zu verwenden und dann nachfolgende Nullen mit der Number-Funktion zu entfernen:
quelle
15.00
? Zahlen in JS speichern keine Dezimalstellen und jede Anzeige schneidet automatisch überschüssige Dezimalstellen ab (alle Nullen am Ende).toFixed(2)
hier ist 2 die Anzahl der Stellen, bis zu denen wir diese Zahl runden möchten.quelle
Es kann für Sie arbeiten,
den Unterschied zwischen toFixed und round kennen. Sie können sich Math.round (num) vs num.toFixed (0) und Browser-Inkonsistenzen ansehen .
quelle
Einfachster Weg:
+num.toFixed(2)
Es konvertiert es in einen String und dann zurück in eine Ganzzahl / Float.
quelle
toFixed()
auf 3. So wäre es+num.toFixed(3)
. Das funktioniert so, wie es soll, 1.005 wird auf 1.00 gerundet, was 1 entsprichtHier ist eine Prototypmethode:
quelle
Verwenden Sie so etwas wie "parseFloat (parseFloat (value) .toFixed (2))"
quelle
Eine Möglichkeit, eine solche Rundung nur bei Bedarf zu erreichen , ist die Verwendung von Number.prototype.toLocaleString () :
Dies liefert genau die Ausgabe, die Sie erwarten, jedoch als Zeichenfolgen. Sie können diese weiterhin in Zahlen konvertieren, wenn dies nicht der erwartete Datentyp ist.
quelle
toLocaleString
.Nach Durchlaufen verschiedener Iterationen aller möglichen Möglichkeiten, um eine wirklich genaue Dezimalrundungsgenauigkeit zu erzielen, ist es klar, dass die genaueste und effizienteste Lösung die Verwendung von Number.EPSILON ist. Dies bietet eine echte mathematische Lösung für das Problem der mathematischen Genauigkeit von Gleitkommazahlen. Es kann wie hier gezeigt einfach polyfilliert werden: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/EPSILON , um alle letzten verbleibenden IE-Benutzer zu unterstützen (dann vielleicht auch wir sollte damit aufhören).
Angepasst an die hier bereitgestellte Lösung: https://stackoverflow.com/a/48850944/6910392
Eine einfache Drop-In-Lösung, die eine genaue Dezimalrundung, Bodenbelag und Decke mit einer optionalen Präzisionsvariablen bietet, ohne eine ganze Bibliothek hinzuzufügen.
UPDATE: Wie Sergey in den Kommentaren feststellte, gibt es eine Einschränkung für diese (oder jede andere) Methode, auf die hingewiesen werden sollte. Bei Zahlen wie 0.0149999999999999999 treten immer noch Ungenauigkeiten auf, die darauf zurückzuführen sind, dass die absolute Grenze der Genauigkeitsbeschränkungen für die Speicherung von Gleitkommawerten erreicht wurde. Es gibt keine mathematische oder andere Lösung, die angewendet werden kann, um dies zu berücksichtigen, da der Wert selbst sofort als 0,015 ausgewertet wird. Sie können dies bestätigen, indem Sie diesen Wert einfach selbst in der Konsole aufrufen. Aufgrund dieser Einschränkung wäre es nicht einmal möglich, die Zeichenfolgenmanipulation zu verwenden, um diesen Wert zu reduzieren, da die Zeichenfolgendarstellung einfach "0,015" ist. Jede Lösung, um dies zu berücksichtigen, müsste logisch an der Datenquelle angewendet werden, bevor der Wert jemals in ein Skript übernommen wird.
quelle
Dies ist die einfachste und eleganteste Lösung (und ich bin der Beste der Welt;):
quelle
E
Notation zu akzeptieren .roundToX(362.42499999999995, 2)
. Erwartetes Ergebnis (wie in PHPecho round(362.42499999999995, 2)
) :362.43
. Tatsächliches Ergebnis:362.42