BigNumber.js 完全指南:JavaScript 高精度数学计算库

BigNumber.js 完全指南:JavaScript 高精度数学计算库

bignumber.js A JavaScript library for arbitrary-precision decimal and non-decimal arithmetic bignumber.js 项目地址: https://gitcode.com/gh_mirrors/bi/bignumber.js

概述

BigNumber.js 是一个用于 JavaScript 的任意精度算术库,它解决了 JavaScript 原生数字类型在处理大数和小数时的精度限制问题。本文将全面介绍该库的核心 API 和使用方法。

构造函数

BigNumber(n [, base])

创建一个新的 BigNumber 实例,参数说明:

  • n:可以是数字、字符串或另一个 BigNumber 对象
  • base:可选,表示数字的进制(2-36)
x = new BigNumber(123.4567)  // '123.4567'
y = BigNumber(x)             // '123.4567'(new 可选)

重要特性:

  1. 支持科学计数法:

    new BigNumber('4.321e+4')  // '43210'
    
  2. 支持特殊值:

    new BigNumber('-Infinity') // '-Infinity'
    new BigNumber(NaN)         // 'NaN'
    
  3. 支持不同进制:

    new BigNumber('ff.8', 16)  // '255.5'
    new BigNumber('-0b10110100.1') // '-180.5'(二进制)
    
  4. 精度控制:

    BigNumber.config({ DECIMAL_PLACES: 5 })
    new BigNumber(1.23456789)    // '1.23456789'
    new BigNumber(1.23456789, 10) // '1.23457'(应用了精度设置)
    

配置方法

clone([object])

创建一个独立的 BigNumber 构造函数副本,可自定义配置:

BigNumber.config({ DECIMAL_PLACES: 5 })
BN = BigNumber.clone({ DECIMAL_PLACES: 9 })

config/set([object])

配置全局设置,主要参数:

  1. DECIMAL_PLACES(默认20):

    BigNumber.config({ DECIMAL_PLACES: 5 })
    
  2. ROUNDING_MODE(默认4,即ROUND_HALF_UP):

    BigNumber.config({ ROUNDING_MODE: BigNumber.ROUND_UP })
    
  3. EXPONENTIAL_AT(默认[-7,20]):

    // 设置科学计数法显示阈值
    BigNumber.config({ EXPONENTIAL_AT: 2 })
    

实用方法

isBigNumber(value)

检查一个值是否为有效的 BigNumber 对象。

max/min

返回一组数中的最大值/最小值:

BigNumber.max(1, 2, 3)  // '3'

random([dp])

生成一个随机数,可选指定小数位数:

BigNumber.random()      // 0-1之间的随机数
BigNumber.random(3)     // 保留3位小数

实例方法

基本运算

x = new BigNumber(10)
x.plus(5)       // 加法 '15'
x.minus(3)      // 减法 '7'
x.times(2)      // 乘法 '20'
x.div(3)        // 除法 '3.333333...'
x.mod(4)        // 取模 '2'
x.pow(2)        // 幂运算 '100'

比较方法

x.eq(y)         // 等于
x.gt(y)         // 大于
x.lt(y)         // 小于
x.gte(y)        // 大于等于
x.lte(y)        // 小于等于
x.cmp(y)        // 比较:1(大于),0(等于),-1(小于)

类型检查

x.isFinite()    // 是否有限
x.isInteger()   // 是否为整数
x.isNaN()       // 是否为NaN
x.isNegative()  // 是否为负数
x.isPositive()  // 是否为正数
x.isZero()      // 是否为零

格式化输出

x.toString()            // 字符串表示
x.toExponential(2)      // 科学计数法 '1.23e+1'
x.toFixed(3)            // 固定小数位数 '10.000'
x.toPrecision(4)        // 有效数字 '10.00'
x.toNumber()            // 转换为原生数字
x.toJSON()              // JSON序列化

内部结构

BigNumber 实例包含三个重要属性:

  • c:系数(coefficient)
  • e:指数(exponent)
  • s:符号(sign,1或-1)

最佳实践

  1. 避免直接使用数字类型:总是将输入转换为字符串或使用 BigNumber 构造函数

    // 不推荐
    new BigNumber(0.1 + 0.2)
    
    // 推荐
    new BigNumber('0.1').plus('0.2')
    
  2. 合理设置精度:根据应用需求配置 DECIMAL_PLACES

  3. 注意进制转换:明确指定进制以避免歧义

  4. 使用比较方法:避免直接使用 JavaScript 的比较运算符

BigNumber.js 为 JavaScript 提供了强大的高精度计算能力,特别适合金融、科学计算等需要精确结果的场景。通过合理配置和使用,可以完全避免 JavaScript 原生数字类型的精度问题。

bignumber.js A JavaScript library for arbitrary-precision decimal and non-decimal arithmetic bignumber.js 项目地址: https://gitcode.com/gh_mirrors/bi/bignumber.js

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

魏真权

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

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

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

打赏作者

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

抵扣说明:

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

余额充值