JS 小數運算出現誤差的兩種解決辦法

本文介紹瞭解決 JS 中小數運算出現誤差的兩種解決辦法

問題

在 JS 的小數運算中可能會出現一些問題,比如說下面兩種情況:

  • 0.1 + 0.2 加法出現精度偏差問題
  • 0.14 * 100 乘法出現精度偏差問題

解決方案

下面簡單介紹了兩種常用的解決方案:

限制精確位數

可以限制保留幾位小數的方式來避免誤差:

// 保留兩位小數
const num = (0.1 + 0.2).toFixed(2);

先將小數轉化爲整數,運算之後再重新轉化爲小數

限制保留小數位數的方式不一定適用於所有場景,有些時候我們必須要根據不同的小數位數來進行計算。那麼我們就可以使用下面這種方式。

定義一個方法,用來對小數進行加法運算

/**
    * 用來進行小數相加的工具方法
    * @param {*} num1 
    * @param {*} num2 
    */
addNum (num1, num2) {
    let sq1, sq2, multiple;
    try {
        sq1 = num1.toString().split(".")[1].length;
    }
    catch (e) {
        sq1 = 0;
    }
    try {
        sq2 = num2.toString().split(".")[1].length;
    }
    catch (e) {
        sq2 = 0;
    }
    multiple = Math.pow(10, Math.max(sq1, sq2) + 1);
    return (num1 * multiple + num2 * multiple) / multiple;
}

使用上面的方法進行小數相加

const num = addNum(0.1 + 0.2);

總結

  • 第一種方法簡單,方便,易於操作;

  • 第二種方法基本可以使用所有小數相加的場景。(如果是其他的運算,修改運算符號,也可以正常使用)

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