1.如果需要高精度计算,使用专门的库是最佳选择
如decimal.js、bignumber.js或math.js,提供了高精度的十进制运算功能。这些库可以处理任意精度的十进制数,非常适合需要高精度计算的场景
2.只需要处理简单的精度问题,使用四舍五入或容错范围可能是足够的
四舍五入整数:
使用Math.round()、Math.floor()、Math.ceil()进行四舍五入
Math.round():四舍五入一个数字到最接近的整数
Math.floor():向下舍入,返回不大于一个给定数字的最大整数
Math.ceil():向上舍入,返回大于或等于一个给定数字的最小整数
四舍五入到特定的小数位数:
toFixed()
3.使用整数进行计算
如果可能的话,尽量将数值乘以一个因子转换成整数进行计算,最后再除以相同的因子得到最终结果。这样可以避免浮点数运算中的精度问题
4. 比较浮点数时使用容错范围
由于浮点数的精度问题,最好不要直接比较两个浮点数是否相。应该检查它们之间的差的绝对值是否小于一个很小的数(即容错范围)。
function areFloatsEqual(num1, num2, epsilon = 0.00001) {
return Math.abs(num1 - num2) < epsilon;
}
5.避免使用浮点数进行循环或递增
最好避免在循环中递增一个浮点数,浮点数的递增可能会导致不可预见的结果,因为不是所有的小数都可以精确地用二进制浮点数表示