本文介紹瞭解決 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);
總結
-
第一種方法簡單,方便,易於操作;
-
第二種方法基本可以使用所有小數相加的場景。(如果是其他的運算,修改運算符號,也可以正常使用)