JS前端数字计算精度丢失问题,请问各位是怎么解决的?

作者站长头像
站长
· 阅读数 10

比如计算百分比,乘除法,js计算有小数点,精度会丢失,通过toFixed可以截取小数后几位,但是会四舍五入,而toPrecision则需要指定数字长度。现在要保留小数点后2位,请问怎么处理

let n = 123.123;
console.log(n.toPrecision(4)) // 123.1
let n = 123.126;
console.log(n.toFixed(2)) // 123.13

期望结果:let n = 123.1266646635525563;// 123.12

回复
1个回答
avatar
test
2024-06-26

所谓“没有完美的算法,只有合适的场景”,浮点数字(小数)就是个很好的例子。

我们知道,按照目前的规范,JS 无法直接完美的处理小数。但是实际上,我们往往也不需要它“完美”处理小数。比如,以记账为例,我们通常只关心小数点后两位,也就是“分”,再细的,我们关注它意义不大,投入产出比太低。那么我们就可以把所有数字 * 100,取整后保存,带来的误差非常低。

所以,讨论小数精度问题,要看具体的需求。只要满足需求,怎么保存都可以。

回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容