ECMAScript浮點數值計算舍入誤差問題

由於ECMAScript使用基於IEEE754數值的浮點計算方法(本人也不明白這是什麼鬼,大概知道一下就好了),有時在做加減計算時會出現如下問題。

實例:

輸入一下代碼:

<script>
    var a = 1.1;
    var b = 1.4;
    alert(a+b);
</script>
瀏覽器會彈出以下結果(有時):


但是比如輸入一下代碼時:

<script>
    var a = 1.2;
    var b = 1.4;
    alert(a+b);
</script>
瀏覽器會彈出以下結果(有時):


因此不建議判斷浮點數值加減的值,比如:

var a = 0.1,
      b = 0.2;
if(a+b == 0.3){
    alert("You got 0.3.");
}


但是平常需要操作浮點數值的加減運算時,可以用以下兩種方法解決舍入誤差問題。

比如:

var a = 20.89,
    b = 18.95;
alert(a-b);
計算結果是:1.9400000000000013

解決方法一:

alert((a*100-b*100)/100);
解決方法二:

alert(parseFloat(a-b).toFixed(2));

parseFloat(a-b):意爲a-b的值取小數

toFixed(2):意爲保留兩位小數



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章