js浮点计算老是出bug,有什么库可以解决吗?2.2+2.1=4.300000000000001
js浮点计算老是出bug,有什么库可以解决吗?2.2+2.1=4.300000000000001
这个叫js浮点计算陷阱(float pitfall),并不是bug
解决方法如下:
js实现:
(2.210+2.110)/10
或者
js原生api: Number.prototype.toFixed()
(2.2+2.1).toFixed(2)
或者:
库: mathjs
number-precision
https://github.com/nefe/numbe...
use
import NP from 'number-precision'
NP.strip(0.09999999999999998); // = 0.1
NP.plus(0.1, 0.2); // = 0.3, not 0.30000000000000004
NP.plus(2.3, 2.4); // = 4.7, not 4.699999999999999
NP.minus(1.0, 0.9); // = 0.1, not 0.09999999999999998
NP.times(3, 0.3); // = 0.9, not 0.8999999999999999
NP.times(0.362, 100); // = 36.2, not 36.199999999999996
NP.divide(1.21, 1.1); // = 1.1, not 1.0999999999999999
NP.round(0.105, 2); // = 0.11, not 0.1
13 回答12.8k 阅读
7 回答2k 阅读
3 回答1.1k 阅读✓ 已解决
2 回答1.2k 阅读✓ 已解决
6 回答912 阅读✓ 已解决
6 回答1.1k 阅读
2 回答1.3k 阅读✓ 已解决
这个不是bug,是浮点数表示和运用中的必然问题。
你可以用一些额外的库来解决相应问题,比如下面的一些,你根据需要选取合适的来使用
https://mathjs.org/
http://mikemcl.github.io/deci...
http://mikemcl.github.io/big.js/
https://mikemcl.github.io/big...
在一些精度要求不那么高的应用环境中,比如要求的小数位数比较少,还可以用
Number
类型数据的toFixed
方法,注意这个方法的返回值是字符串!