项目开发中发现精度丢失的问题,如0.1+0.2 = 0.30000000000000004的问题
解决方式:引用bignumber.js用于数字精度要求较高的计算。
1、安装或引用:
下载地址:https://github.com/MikeMcl/bignumber.js/releases
或 npm install bignumber.js --save 命令安装后使用 import BigNumber from 'bignumber.js' 引用
2、bignumber.js API地址: http://mikemcl.github.io/bignumber.js/
3、静态方法
- clone() & config() 可以为BigNumber构造函数设置参数
var BN = BigNumber.clone() //生成一个独立的BigNumber构造函数
BN.config({DECIMAL_PLACES:4, ROUNDING_MODE: 4}) //设置小数点、舍入模式
BN(1).div(3).toNumber() //0.3333,注意跟上面计算结果的区别
- maximum & minimum & sum & radom
import BigNumber from 'bignumber.js'export default {name: 'landing-page',components: { SystemInformation },created(){let x = new BigNumber(0.1)let x2 = new BigNumber()let y = x.plus(0.2) console.log('8888-----',0.1+0.2); // 0.30000000000000004console.log('9999--plus---',y.toString()); // 0.3console.log('9999--maximum---',BigNumber.maximum(2,12,32.21,222.11,76).toString()); // 222.11console.log('9999--sum---',BigNumber.sum(1,2,3,4,5).toString()); // 15console.log('9999--radom---',BigNumber.random(10).toString()); // 0.4046523741},
3、实例方法
- 加法 .plus(n [, base]) ⇒ BigNumber
- 减法 .minus(n [, base]) ⇒ BigNumber
- 乘法 .times(n [, base]) ⇒ BigNumber
- 除法 .div(n [, base]) ⇒ BigNumber
- 取模/取余: .mod(n [, base])
- 指数运算: .pow(n [, m]) ⇒ BigNumber
- 开平方:.sqrt() ⇒ BigNumber
- 比较大小: .comparedTo(n [, base]) ⇒ number
- 精度调整 .dp([dp [, rm]]) ⇒ BigNumber|number
- 取整:.integerValue([rm]) ⇒ BigNumber
- 有效数字 .sd([d [, rm]]) ⇒ BigNumber|number
- 保留小数位数 .toFixed([dp [, rm]]) ⇒ string
let x = 6.2000, y = 3.10, z = 9;console.log('9999--plus---',BigNumber(0.7).plus(x).plus(y).toString()); // 10console.log('9999--minus---',BigNumber(x).minus(2).toString()); // 4.2console.log('9999--times---',BigNumber(x).times(10).toString()); // 62console.log('9999--div---',BigNumber(x).div(y).toString()); // 2console.log('9999--mod---',BigNumber(x).mod(y).toString()); // 0console.log('9999--pow---',BigNumber(x).pow(-2).toString()); // 0.0260145681581685744console.log('9999--sqrt---',BigNumber(z).sqrt().toString()); // 3console.log('9999--toFixed---',BigNumber(x).toFixed(1).toString()); // 6.2console.log('9999--integerValue---',BigNumber(x).integerValue(1).toString()); // 6console.log('9999--sd---',BigNumber(x).sd().toString()); // 2console.log('9999--comparedTo---',BigNumber(x).comparedTo(y).toString()); //1, 1为大于,-1为小于,0为等于