JavaScript 中的浮点数运算不精确是由于浮点数的表示所导致的。 JavaScript 中的所有数字都是以 IEEE 754 标准的双精度浮点数形式存储,这意味着一些数字可能会表现为科学计数法形式,并且在进行加减乘除等操作时可能会引入舍入误差。
解决方法:
- 使用库:使用像
decimal.js或big.js这样的库,它们提供了对大数和高精度计算的支持。 - 四舍五入:在需要精确结果的时候,使用
toFixed()方法将浮点数转换为字符串,并保留足够的小数位数,然后再做相应的计算。 - 整数运算:如果可能,将所有数转换为整数,进行运算后再除以适当的倍数,以避免浮点数运算的问题。
- 自定义精确加减乘除函数:编写自己的精确计算函数,处理小数点后的位数,确保运算过程中的精度。
示例代码(使用四舍五入):
function preciseAdd(num1, num2) {
return Number(num1.toFixed(2)) + Number(num2.toFixed(2));
}
let result = preciseAdd(0.1 + 0.2, 0.3); // 结果会四舍五入到小数点后两位
console.log(result); // 输出 0.6