2012-06-20 14 views
5

Ich mache eine Berechnung in Java-Skript, aber ich bin ein Problem aufgrund der Genauigkeit in Dezimalzahlen. Ich kann nicht die genaue Berechnung posten, aber das ist, was ich tue, welcheJavascript unerwartetes Ergebnis

zu einem unerwarteten Ergebnis führt, wenn ich schreibe: alert(100.01-36.01); // Ergebnis ist 64

Aber wenn ich schreibe: alert(100.01-37.01); // führen ist 63.00000000000001

und es geht so weiter für 38.01 .... so weiter. Kann mir bitte helfen, warum das so ein unerwartetes Verhalten zeigt. Ich stecke in einer Rechnung fest.

Vielen Dank im Voraus.

+2

Maschinen haben keine unendliche Genauigkeit, daher muss man immer vorsichtig sein, wenn man Fließkommawerte vergleicht, 64 ist eine spezielle Zahl für eine Maschine, es ist eine Potenz von 2, also kann es es ziemlich gut darstellen. –

+1

das könnte Ihnen helfen http://stackoverflow.com/questions/588004/is-javascripts-math-broken –

+2

Dies wurde mindestens eine Million Mal auf SO gebeten, bitte verwenden Sie die Suche vor dem Posten einer Frage. – Niko

Antwort

1

Versuchen Sie folgendes:

 
<script type="text/javascript"> 
var n1 = parseFloat(100.01); 
var n2 = parseFloat(37.01); 
var res = (n1-n2) 
alert(res.toFixed(2)); 
</script> 
0

, wenn Sie nicht die Zahlen als Zahlen erklären, js wird die automatische Verwendung als Zeichenfolge, wenn die Zeichenfolge nicht nur durch Zahlen verwendet wird.

parseFloat (123.45) wird es als Dezimalzahl festlegen.