0.1 * 3 应该等于0.3这是正常理解对吧
可是js告诉我不是0.3 我测试输出0.30000000002 惊呆了
怎么办 还好前人已经帮我们解决 可以使用 decimal.js 这个库
https://www.jianshu.com/p/2ed7129a7ed0
这是别人的解决方案 我copy一下 留作参考
API
1.获取绝对值
a = Decimal.abs(x)
b = new Decimal(x).abs()
a.equals(b) // true
x = new Decimal(-0.8)
y = x.absoluteValue() // '0.8'
z = x.abs() // '0.8'
2.获取整数
a = Decimal.trunc(x)
b = new Decimal(x).trunc()
a.equals(b) // true
x = new Decimal(123.456)
x.truncated() // '123'
y = new Decimal(-12.3)
y.trunc() // '-12'
3.获取正无穷大方向的整数
a = Decimal.ceil(x)
b = new Decimal(x).ceil()
a.equals(b) // true
x = new Decimal(1.3)
x.ceil() // '2'
y = new Decimal(-1.8)
y.ceil() // '-1'
4.获取负无穷大方向的整数
a = Decimal.floor(x)
b = new Decimal(x).floor()
a.equals(b) // true
x = new Decimal(1.8)
x.floor() // '1'
y = new Decimal(-1.3)
y.floor() // '-2'
5.获取最大值
r = Decimal.max(x, y, z)
6.获取最小值
r = Decimal.min(x, y, z)
7.获取大于等于0小于1的随机数
Decimal.set({ precision: 10 })
Decimal.random() // '0.4117936847'
Decimal.random(20) // '0.78193327636914089009'
8.获取小数位数
x = new Decimal(1.234)
x.decimalPlaces() // '3'
y = new Decimal(987.654321)
y.dp() // '6'
9.获取反值
x = new Decimal(1.8)
x.negated() // '-1.8'
y = new Decimal(-1.3)
y.neg() // '1.3'
10.获取位数
x = new Decimal(1.234)
x.precision() // '4'
y = new Decimal(987000)
y.sd() // '3'
y.sd(true) // '6'
11.获取指定小数位数的字符串
x = 3.456
y = new Decimal(x)
x.toFixed() // '3'
y.toFixed() // '3.456'
y.toFixed(0) // '3'
x.toFixed(2) // '3.46'
y.toFixed(2) // '3.46'
y.toFixed(2, Decimal.ROUND_DOWN) // '3.45'
x.toFixed(5) // '3.45600'
y.toFixed(5) // '3.45600'
12.保留小数指定位数
x = new Decimal(12.34567)
x.toDecimalPlaces(0) // '12'
x.toDecimalPlaces(1, Decimal.ROUND_UP) // '12.3'
y = new Decimal(9876.54321)
y.toDP(3) // '9876.543'
y.toDP(1, 0) // '9876.6'
y.toDP(1, Decimal.ROUND_DOWN) // '9876.5'
- 加法
a = Decimal.add(x, y)
b = new Decimal(x).plus(y)
a.equals(b) // true
0.1 + 0.2 // 0.30000000000000004
x = new Decimal(0.1)
y = x.plus(0.2) // '0.3'
new Decimal(0.7).plus(x).plus(y) // '1.1'
14.减法
a = Decimal.sub(x, y)
b = new Decimal(x).sub(y)
a.equals(b) // true
0.3 - 0.1 // 0.19999999999999998
x = new Decimal(0.3)
x.minus(0.1) // '0.2'
15.乘法
a = Decimal.mul(x, y)
b = new Decimal(x).mul(y)
a.equals(b) // true
0.6 * 3 // 1.7999999999999998
x = new Decimal(0.6)
y = x.times(3) // '1.8'
new Decimal('7e+500').times(y) // '1.26e+501'
16.除法
a = Decimal.div(x, y)
b = new Decimal(x).div(y)
a.equals(b) // true
x = new Decimal(355)
y = new Decimal(113)
x.dividedBy(y) // '3.14159292035398230088'
x.div(5) // '71'
17.%模运算
a = Decimal.mod(x, y)
b = new Decimal(x).mod(y)
a.equals(b) // true
1 % 0.9 // 0.09999999999999998
x = new Decimal(1)
x.modulo(0.9) // '0.1'
y = new Decimal(8)
z = new Decimal(-3)
Decimal.modulo = 1
y.mod(z) // '2'
Decimal.modulo = 3
y.mod(z) // '-1'
作者:张思学
链接:https://www.jianshu.com/p/2ed7129a7ed0
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。