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

在项目开发中遇到浮点数计算精度丢失的问题,例如0.1+0.2不等于0.3。为了解决这个问题,可以引入bignumber.js库。该库提供高精度计算,避免精度损失。通过npm安装或直接引用,配置小数位数和舍入模式,使用静态方法如maximum、minimum、sum、random等,以及实例方法如plus、minus、times、div等进行操作。这样可以确保在计算中保持所需精度。
摘要由CSDN通过智能技术生成

项目开发中发现精度丢失的问题,如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.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
    },

 

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());  // 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为等于

 

 

 

 

 

 

  • 5
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值