一、js浮点数精度丢失
0.1 + 0.2 === 0.30000000000000004
2.3 + 2.4 === 4.699999999999999
1 - 0.9 === 0.09999999999999998
3 * 0.3 === 0.8999999999999999
0.362 * 100 === 36.199999999999996
1.21 / 1.1 === 1.0999999999999999
0.105.toFixed(2) === '0.10' // true,toFixed四舍五入的效果在此例上没有体现
二、使用number-precision解决
1、安装
npm install number-precision --save
2、引入
import NP from 'number-precision'
3、使用
-
加
console.log(NP.plus(0.1, 0.2)) // 0.3 console.log(NP.plus(2.3, 2.4)) // 4.7
-
减
console.log(NP.minus(1, 0.9)) // 0.1
-
乘
console.log(NP.times(3, 0.3)) // 0.9 console.log(NP.times(0.362, 100)) // 36.2
-
除
console.log(NP.divide(1.21, 1.1)) // 1.1
保留几位小数点,实现了toFixed在此场景下四舍五入的功能
console.log(NP.round(0.105, 2)) // 0.11
三、使用bignumber.js解决
1、安装
npm install bignumber.js --save
2、引入
import BigNumber from 'bignumber.js'
3、使用
加
const a = new BigNumber(0.1)
console.log(a.plus(0.2).toString()) // 0.3
减
const a = new BigNumber(1)
console.log(a.minus(0.9).toString()) // 0.1
乘
const a = new BigNumber(3)
console.log(a.times(0.3).toString()) // 0.9
除
const a = new BigNumber(1.21)
console.log(a.div(1.1).toString()) // 1.1
取余
const a = new BigNumber(10)
console.log(a.mod(4).toString()) // 2
比较大小
const a = new BigNumber(10)
console.log(a.eq(10)) // true 是否相等
console.log(a.gt(9)) // true a是否大于9
console.log(a.gte(9)) // true a是否大于等于9
console.log(a.lt(9)) // false a是否小于9
console.log(a.lte(9)) // false a是否小于等于9