JavaScript 数字精度问题解决方案¶
JavaScript 在进行浮点数运算时经常会出现精度问题,例如 0.1 + 0.2 !== 0.3。本文介绍了一种解决浮点数精度问题的方法。
解决思路¶
以最大精度为标准同化精度再计算。即将参与运算的数字转换为整数进行计算,然后再转换回小数。
代码实现¶
/**
* 精确加法计算
* @param {number} num1 - 第一个加数
* @param {number} num2 - 第二个加数
* @returns {number} 计算结果
*/
function addNum(num1, num2) {
let sq1, sq2, m;
try {
sq1 = num1.toString().split(".")[1].length;
} catch (e) {
sq1 = 0;
}
try {
sq2 = num2.toString().split(".")[1].length;
} catch (e) {
sq2 = 0;
}
m = Math.pow(10, Math.max(sq1, sq2));
return (num1 * m + num2 * m) / m;
}
使用示例¶
console.log(addNum(0.1, 0.2)); // 输出: 0.3
console.log(addNum(0.15, 0.25)); // 输出: 0.4
console.log(addNum(1.23, 4.567)); // 输出: 5.797
其他精度处理方法¶
除了上述方法外,还有其他处理浮点数精度问题的方案:
-
使用 toFixed() 方法:
-
使用第三方库:如
decimal.js、big.js等专门处理高精度运算的库
注意事项¶
- 该方法只处理了加法运算,如需处理其他运算(减、乘、除),可参考类似的思路
- 对于需要更高精度的计算场景,建议使用专门的数学计算库
- 在金融等对精度要求极高的场景中,应格外注意浮点数运算的准确性