BigNumber.js 完全指南:JavaScript 高精度数学计算库
概述
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 可选)
重要特性:
-
支持科学计数法:
new BigNumber('4.321e+4') // '43210'
-
支持特殊值:
new BigNumber('-Infinity') // '-Infinity' new BigNumber(NaN) // 'NaN'
-
支持不同进制:
new BigNumber('ff.8', 16) // '255.5' new BigNumber('-0b10110100.1') // '-180.5'(二进制)
-
精度控制:
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])
配置全局设置,主要参数:
-
DECIMAL_PLACES(默认20):
BigNumber.config({ DECIMAL_PLACES: 5 })
-
ROUNDING_MODE(默认4,即ROUND_HALF_UP):
BigNumber.config({ ROUNDING_MODE: BigNumber.ROUND_UP })
-
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)
最佳实践
-
避免直接使用数字类型:总是将输入转换为字符串或使用 BigNumber 构造函数
// 不推荐 new BigNumber(0.1 + 0.2) // 推荐 new BigNumber('0.1').plus('0.2')
-
合理设置精度:根据应用需求配置 DECIMAL_PLACES
-
注意进制转换:明确指定进制以避免歧义
-
使用比较方法:避免直接使用 JavaScript 的比较运算符
BigNumber.js 为 JavaScript 提供了强大的高精度计算能力,特别适合金融、科学计算等需要精确结果的场景。通过合理配置和使用,可以完全避免 JavaScript 原生数字类型的精度问题。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考