我正在做一個Java腳本的計算,但由於十進制數的精度,我面臨一個問題。 我不能發佈精確計算,但是這是我在做什麼,這導致了意想不到的結果Javascript意外的結果
當我寫: alert(100.01-36.01);
//結果是64
但是,當我寫: alert(100.01-37.01);
//導致是63.00000000000001
它繼續像38.01一樣....等等。 任何人都可以幫助我,爲什麼這是顯示這樣一個意想不到的行爲。 我被困在計算中。
在此先感謝。
我正在做一個Java腳本的計算,但由於十進制數的精度,我面臨一個問題。 我不能發佈精確計算,但是這是我在做什麼,這導致了意想不到的結果Javascript意外的結果
當我寫: alert(100.01-36.01);
//結果是64
但是,當我寫: alert(100.01-37.01);
//導致是63.00000000000001
它繼續像38.01一樣....等等。 任何人都可以幫助我,爲什麼這是顯示這樣一個意想不到的行爲。 我被困在計算中。
在此先感謝。
試試這個:
<script type="text/javascript"> var n1 = parseFloat(100.01); var n2 = parseFloat(37.01); var res = (n1-n2) alert(res.toFixed(2)); </script>
,如果你不爲數字宣佈的數字,JS會自動使用它作爲字符串,如果字符串不僅使用數字。
parseFloat(123.45)將它設置爲十進制數。
機器沒有無限精度,因此在比較浮點值時必須小心,64是機器的特殊數字,它的冪爲2,因此它可以很好地表示它。 –
這可能會幫助你http://stackoverflow.com/questions/588004/is-javascripts-math-broken –
這已被問及至少一百萬次,請在發佈問題前使用搜索。 – Niko