JS中bignumber处理高精度小数运算的使用

JS中bignumber处理高精度小数运算的使用


项目开发中发现精度丢失的问题,如0.1+0.2 = 0.30000000000000004的问题

解决方式:引用bignumber.js用于数字精度要求较高的计算。

安装或引用

bignumber.js的API地址:

http://mikemcl.github.io/bignumber.js/

在这里插入图片描述

静态方法

  • 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: '',
    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.30000000000000004
      console.log('9999--plus---',y.toString());  // 0.3
      console.log('9999--maximum---',BigNumber.maximum(2,12,32.21,222.11,76).toString());  // 222.11
      console.log('9999--sum---',BigNumber.sum(1,2,3,4,5).toString()); // 15
      console.log('9999--radom---',BigNumber.random(10).toString());  // 0.4046523741
    },

实例方法

  • 加法 .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());  // 10
      console.log('9999--minus---',BigNumber(x).minus(2).toString());  // 4.2
      console.log('9999--times---',BigNumber(x).times(10).toString());  // 62
      console.log('9999--div---',BigNumber(x).div(y).toString());  // 2
      console.log('9999--mod---',BigNumber(x).mod(y).toString());  // 0
      console.log('9999--pow---',BigNumber(x).pow(-2).toString());  // 0.0260145681581685744
      console.log('9999--sqrt---',BigNumber(z).sqrt().toString());  // 3
      console.log('9999--toFixed---',BigNumber(x).toFixed(1).toString());  // 6.2
      console.log('9999--integerValue---',BigNumber(x).integerValue(1).toString());  // 6
      console.log('9999--sd---',BigNumber(x).sd().toString());  // 2
      console.log('9999--comparedTo---',BigNumber(x).comparedTo(y).toString());  //1, 1为大于,-1为小于,0为等于

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

teng28

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值