JS 精度差異 0.1+0.2 != 0.3

pardon110發表於2020-04-21

數字乘以 10 的 n 次冪,換算成計算機能夠精確識別的整數,然後再除以 10 的 n 次冪來處理

JS精度

console.log(0.1+0.2)
// 0.30000000000000004

計算

    var x = 4.23323;//測試的數字
    var y = String(x).indexOf(".") + 1;//獲取小數點的位置
    var count = String(x).length - y;//獲取小數點後的個數

題目

求 a 和 b 相乘的值,a 和 b 可能是小數,需要注意結果的精度問題
輸入

3, 0.0001

輸出

0.0003

思路

  1. 先將其轉換成字串
  2. 根據小數點的位置確定小數位數
  3. 依據位數取高精度值
  4. 用toFixed()函式確定結果小數位

方案

function multiply(a, b) {
    var stra=a.toString();
    var strb=b.toString();
    var len=Math.max(stra.length-stra.indexOf('.')-1,strb.length-strb.indexOf('.')-1);
    // 求兩個數中精度大的一個
    return parseFloat(a*b).toFixed(len);
}
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章