有关JS小数运算精度问题的讲解
程序员文章站
2023-08-28 19:46:59
我们可能在平时运算过程中碰到以下类似情况:
0.1 + 0.2 结果是 0.30000000000000004
0.0003 * 10 结果是 0.00299999999999...
我们可能在平时运算过程中碰到以下类似情况:
0.1 + 0.2 结果是 0.30000000000000004
0.0003 * 10 结果是 0.0029999999999999996
0.003 / 10 结果是 0.00030000000000000003
原因在于:在计算机内部,使用二进制浮点数并不能准确地表示像 0.1, 0.2 或 0.3 这样的数字,所以当编码或解释代码时,像“0.1”其实已经舍入为与0.1最接近的数字,即使在计算发生之前已经会导致小的舍入误差(是的,所有语言都是这样)
如果不想看到这些额外的小数位数:在显示时,我们可以用tofixed()或toprecision() 之类将结果格式化为固定的小数位数
tofixed(num)可把 number 四舍五入为指定小数位数的数字
toprecision(num)可在对象的值超出指定位数时将其转换为指数计数法