2016-08-03 18 views
3

Hallo ich versuche, 2 Dezimalzahlen zu subtrahieren und es hält einige seltsame Zahl zurück.Subtrahieren 2 Dezimalzahlen Javascript

var x = 0.00085022 
var y = 0.00085050 
var answer = x - y 
alert(answer) 

Dies ist die Nummer -2.8000000000007186e-7

+0

Mögliches Duplikat von [Format Nummer immer sho w 2 Dezimalstellen] (http://stackoverflow.com/questions/6134039/format-number-to-always-show-2-decimal-places) –

+0

Bitte schauen Sie sich hier an [Wie man mit der Gleitkommazahlgenauigkeit umgeht in JavaScript?] (http://stackoverflow.com/questions/1458633/how-to-deal-with-floating-point-number-precision-in-javascript) – choz

+0

http://www.2ality.com/2012/ 03/displaying-numbers.html –

Antwort

1

Sie subtrahieren mit einer höheren Anzahl und die Berechnungen durchqueren auf eine noch niedrigere Zahl zurück. Ja -2,0 ist niedriger und die Genauigkeit der Dezimalstellen ist exponentiell höher.

Wenn wir sie aufrunden erhalten wir:

var x = 85022 
var y = 85050 
var answer = x - y 
alert(answer); // = -28 
2

Die maximale Anzahl der Dezimalstellen ist 17, aber arithmetische Gleitkommazahl ist nicht zu 100% korrekt http://www.w3schools.com/js/js_numbers.asp

Try this:

var x = 0.00085022 * 100000000; 
var y = 0.00085050 * 100000000; 
var answer = (x - y)/100000000; 
alert(answer); 
+4

Denken Sie daran, dass Sie anstatt durch '100000000' zu multiplizieren mit' 0,000000001', was eine weniger teure Berechnung ist. Aber wie immer sollte diese Verbesserung im Interesse der Klarheit des Codes keine Rolle spielen, bis die Leistung zum Problem wird. –