问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

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

创作时间:
作者:
@小白创作中心

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

引用
CSDN
1.
https://blog.csdn.net/zhouzuoluo/article/details/112980462

在JavaScript开发中,经常会遇到浮点数运算精度丢失的问题,比如0.1+0.2 = 0.30000000000000004。为了解决这类问题,可以使用bignumber.js库来处理高精度小数运算。

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

1、安装或引用

你可以通过以下方式获取bignumber.js:

bignumber.js API地址: http://mikemcl.github.io/bignumber.js/

2、静态方法

  • 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 & random

    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--random---',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为等于
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号