1. 程式人生 > >浮點數的計算失去精度問題

浮點數的計算失去精度問題

1      -   0.9  = 0.09999999999999998

0.3   *   3     = 0.8999999999999999

0.3   /   3     = 0.09999999999999999

0.31 *   3     = 0.9299999999999999

JS作為解釋性語言,直接計算會有浮點數精度丟失問題

解決方案:

基本思路:將浮點數轉換成整數進行計算,然後再將整數結果轉回正確的浮點數。

定義一個自定義的轉換和處理函式:

Math.formatFloat = function (f, digit) {
    var m = Math.pow(10, digit);
    return Math.round(f * m, 10) / m;
}

console.log('處理前'+(1-0.9),'處理後'+Math.formatFloat(1-0.9,2));
console.log('處理前'+(0.3*3),'處理後'+Math.formatFloat(0.3*3,2));
console.log('處理前'+(0.3/3),'處理後'+Math.formatFloat(0.3/3,2));
console.log('處理前'+(0.31/3),'處理後'+Math.formatFloat(0.31/3,3));

//結果
處理前0.09999999999999998 處理後0.1
處理前0.8999999999999999  處理後0.9
處理前0.09999999999999999 處理後0.1
處理前0.10333333333333333 處理後0.103