Nein, mit Ihrem Code ist nichts falsch, die meisten Dezimalbrüche können nicht genau dargestellt werden binär, benutze
%Vor% Dabei ist x
die Anzahl der gewünschten Dezimalstellen und number
das Ergebnis der Subtraktion.
Der Grund Ihres Problems wird hier erklärt: Warum gibt der Modulo-Operator die Bruchzahl in Javascript zurück?
Eine mögliche Lösung könnte sein:
%Vor% toFixed()
ist was du suchen musst.
ZB
%Vor%wobei x die Anzahl der Nachkommastellen ist. Es ist optional mit dem Standardwert 0.
Mehr hier: Javascript Number.toFixed () Methode
Sie tun nichts falsches, was Sie sehen, ist der Nebeneffekt von Computern, die Zahlen in der Basis 2 speichern. In der Basis 10 kann 1/3 nicht genau dargestellt werden: .33333333 (mit einem Balken über der 3). Das gleiche gilt für 1/10 und 1/5 in Basis 2 oder Binär. Die Antwort, die Sie sehen, ist lediglich das Ergebnis eines Rundungsfehlers. Wenn Sie mit Geld arbeiten, wird es oft empfohlen, Werte nur als Cent zu speichern, um Gleitkommafehler zu vermeiden.
Was das Reparieren des Ergebnisses betrifft, können Sie etwas tun wie:
%Vor%Eine andere mögliche Lösung könnte dies sein:
%Vor%Wo x die Toleranz in Dezimalzahlen sein sollte, die Sie möchten.
Wenn ich dies mit einem x
von 16 ausführe, bekomme ich eine Ausgabe von -0.3
.
Lass es mich wissen.
Tags und Links javascript floating-point