如何进行js的运算精度问题(JS,开发技术)

时间:2024-05-10 06:13:30 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

    %E5%A6%82%E4%BD%95%E8%BF%9B%E8%A1%8Cjs%E7%9A%84%E8%BF%90%E7%AE%97%E7%B2%BE%E5%BA%A6%E9%97%AE%E9%A2%98

都知道拿js去做运算肯定会遇到计算精准的问题(或称舍入误差),但是怎么避开这些坑?

精准丢失的原因

计算机的二进制实现和位数限制有些数无法有限表示。就像一些无理数不能有限表示,如 圆周率 3.1415926…,1.3333… 等。JavaScript 使用 64 位存储数字类型,因此超出的会舍去。舍去的部分就是精度丢失的部分。

以下是十进制小数对应的二进制表示

解决方案

如需要更加复杂的计算类库,可以考虑 math.js等知名类库

浮点数(小数)

对于小数,前端出现问题的几率还是很多的,尤其在一些电商网站涉及到金额等数据。解决方式:把小数放到位整数(乘倍数),再缩小回原来倍数(除倍数)转换成整数后的运算结果 不能超过 Math.pow(2,53)

浮点精准运算

使用方法:

超大整数

虽然运算结果不超过Math.pow(2,53)的整数(9007199254740992)也可以使用上面的方法,但是如果就是有超过的呢,实际场景中可能会是一些批次号、号段之类的需求,这里我也找到了一个解决方案,直接上代码。

在线运算:https://www.shen.ee/math.html

使用方法:不可使用负数,参数最好使用字符串

toFixed 的修复

在Firefox / Chrome中,toFixed并不会对于最后一位是5的如愿以偿的进行四舍五入。

Firefox 和 Chrome的实现没有问题,根本原因还是计算机里浮点数精度丢失问题。

修复方式:

本文:如何进行js的运算精度问题的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:JS正则表达式的实例分析下一篇:

3 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18