js的精度太大太小都会有不同的问题,好在有很多好用的js库可以处理这些问题。常用库有math.js和big.js。我选择了big.js,因为文档比较好查且简单,在打开控制台可以直接写demo。big.js文档地址
以下介绍常用的api
DP
最大的小数精度范围,默认20
Big.DP = 40
RM
超出精度时的舍入模式,
0 截断,不舍入
1 向0舍入
2 四舍五入
3向上舍入
Big.RM = 0
minus
减法
0.3 - 0.1 // 0.19999999999999998
x = new Big(0.3)
x.minus(0.1) // '0.2'
plus
加法
0.1 + 0.2 // 0.30000000000000004
x = new Big(0.1)
y = x.plus(0.2) // '0.3'
Big(0.7).plus(x).plus(y) // '1.1'
times
乘法
0.6 * 3 // 1.7999999999999998
x = new Big(0.6)
y = x.times(3) // '1.8'
Big('7e+500').times(y) // '1.26e+501'
div
除法,如果分数比big.DP指定的数字多将会采取big.RM的舍入模式。
x = new Big(355)
y = new Big(113)
x.div(y) // '3.14159292035398230088'
mod
求余
1 % 0.9 // 0.09999999999999998
x = new Big(1)
x.mod(0.9) // '0.1'
abs
取绝对值
(new Big(-0.8).abs()).toString() // '0.8'
cmp
如果值比n大返回-1,如果值比n小返回1,如果值和n相同返回0.
n=new Big(6)
n.cmp(6) // 0
n.cmp(7) // -1
n.cmp(5) // 1