如何在JavaScript中计算超过15位的大十进制数?
JavaScript十进制计算的精度坑与解决办法
嘿,这绝对是JavaScript开发者刚上手时都会懵一下的问题!毕竟谁第一次看到0.1 + 0.2不等于0.3都会疑惑对吧?
问题根源
JavaScript用双精度浮点数存储所有数值,这就导致一些十进制小数无法被精确表示——比如0.1和0.2在二进制里都是无限循环的,相加后自然就出现了精度偏差:
console.log(0.1 + 0.2) // 输出:0.30000000000000004
解决方案:用bignumber.js处理
这类精度问题不用自己造轮子,用成熟的数值处理库就能搞定,我平时常用的是bignumber.js,它专门针对十进制数值运算做了优化,能给出我们预期的结果:
console.log(Number(new BigNumber(0.1).plus(0.2))); // 输出:0.3
你可以通过npm安装它(npm install bignumber.js),或者下载库文件本地引入,就能使用它的一系列精准运算API了。
注意bignumber.js的局限性
不过它也不是万能的,bignumber.js接受的参数类型只有字符串、数字或者BigNumber实例。如果传入其他类型(比如无法转换为有效数值的字符串、复杂对象),很可能会返回NaN或者抛出错误,使用时一定要注意参数的合法性哦。
内容的提问来源于stack exchange,提问作者P.S.
相关产品推荐
相关产品推荐

