在公司开发的库房系统中,需要应用到数值的计算,比如库房财务计算时,需要计算很多小数点的数值。而适用js在财务人员填入数量和单价时,需要及时显示出来总价,这个时候就涉及到了js浮点数值的计算陷阱,即很多简单的加减乘除计算结果都不符合实际。

浮点数计算陷阱参考文档:

https://github.com/camsong/bl...

0.1+0.2=0.30000000000000004

//0.1 和 0.2 都转化成二进制后再进行运算
0.00011001100110011001100110011001100110011001100110011010 +
0.0011001100110011001100110011001100110011001100110011010 =
0.0100110011001100110011001100110011001100110011001100111
// 转成十进制正好是 0.30000000000000004
这与我想要得到的结果肯定是相差甚远,于是百度找到了一个js数值计算的js插件,bignumber.js.

解决方法

bignumber.js是一个用于进行数学运算的库,支持任意精度。文档地址:https://juejin.im/post/5be00d...
引入bignumber.js,使用其封装的方法进行数值计算。

简单示例

加法
x = new BigNumber(0.1) 
y = x.plus(0.2) // 0.1 + 0.2 = 0.3 
BigNumber(0.7).plus(x).plus(y) // 0.7 + 0.1 + 0.3 = 1 
减法
x = new BigNumber(0.3) 
x.minus(0.1) // 0.3 -0.1 = 0.2 
乘法
x = new BigNumber(0.6) 
y = x.multipliedBy(3) // 0.6 * 3 = 1.8
除法
x = new BigNumber(10)
x.div(5) // 10 / 5 = 2
取余
x = new BigNumber(1) 
x.modulo(0.9) // 1 / 0.9  0.1

如若时光萧瑟去丶
111 声望9 粉丝

weakChickenPeng.