浮點數的計算失去精度問題
阿新 • • 發佈:2018-12-21
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