bignumber.js 使用指南

3,655 阅读4分钟

bignumber.js 是一个功能强大的 JavaScript 库,专门用于处理任意精度的算术运算。它在 GitHub 上托管,可以轻松集成到任何网页中。本指南将详细介绍 bignumber.js 的使用方法,帮助您充分利用其强大的功能。

构造函数

BigNumber 构造函数是创建 BigNumber 对象实例的基础。

var x = new BigNumber(123.4567); // '123.4567'
var y = BigNumber(x); // '123.4567',关键字 'new' 是可选的

BigNumber 支持多种数值格式,包括十进制、科学计数法、二进制、八进制和十六进制。

配置方法

BigNumber.config 方法允许您配置 BigNumber 的全局设置,确保运算结果的一致性和准确性。

BigNumber.config({
  DECIMAL_PLACES: 5, // 设置操作结果保留的小数位数
  ROUNDING_MODE: BigNumber.ROUND_HALF_UP // 设置舍入模式
});

详细配置选项

DECIMAL_PLACES

  • 类型:整数
  • 范围:0 到 1e+9
  • 默认值:20
  • 说明:控制除法、平方根、底数转换和负指数幂运算结果的小数位数。

ROUNDING_MODE

  • 类型:整数
  • 范围:0 到 8
  • 默认值:4 (ROUND_HALF_UP)
  • 说明:定义舍入模式,影响 decimalPlacesprecisiontoExponentialtoFixedtoFormattoPrecision 方法。

EXPONENTIAL_AT

  • 类型:整数或整数数组
  • 范围:单一整数为 0 到 1e+9;数组时第一个整数为 -1e+9 到 0,第二个整数为 0 到 1e+9
  • 默认值:[-7, 20]
  • 说明:控制 toString 方法返回指数表示法的指数值。

RANGE

  • 类型:整数或整数数组
  • 范围:单一整数为 1 到 1e+9;数组时第一个整数为 -1e+9 到 -1,第二个整数为 1 到 1e+9
  • 默认值:[-1e+9, 1e+9]
  • 说明:定义指数值超出此范围时的上溢和下溢行为。

CRYPTO

  • 类型:布尔值
  • 默认值:false
  • 说明:决定是否使用密码学安全的伪随机数生成。

MODULO_MODE

  • 类型:整数
  • 范围:0 到 9
  • 默认值:1 (ROUND_DOWN)
  • 说明:定义计算模数时的舍入模式。

POW_PRECISION

  • 类型:整数
  • 范围:0 到 1e+9
  • 默认值:0
  • 说明:定义幂运算结果的显著数字的最大数量。

FORMAT

  • 类型:对象
  • 说明:配置 toFormat 方法返回字符串的格式。

ALPHABET

  • 类型:字符串
  • 默认值:'0123456789abcdefghijklmnopqrstuvwxyz'
  • 说明:定义用于底数转换的字母表。

静态方法

BigNumber 构造函数提供了多种静态方法,方便在不创建实例的情况下进行操作。

clone

创建一个新的 BigNumber 构造函数,具有独立的配置。

var BN = BigNumber.clone({ DECIMAL_PLACES: 9 });
var x = new BN(1).div(3); // 使用新的构造函数

config

配置当前 BigNumber 构造函数的全局设置。

BigNumber.config({ DECIMAL_PLACES: 4 });

isBigNumber

检查一个值是否是 BigNumber 实例。

var x = new BigNumber(5);
console.log(BigNumber.isBigNumber(x)); // true

maximum / max

返回多个数值中的最大值。

var max = BigNumber.maximum(1, 2, 3); // '3'

minimum / min

返回多个数值中的最小值。

var min = BigNumber.minimum(1, 2, 3); // '1'

random

生成一个指定小数位数的伪随机数。

var rand = BigNumber.random(); // 例如 '0.4117936847'

sum

计算多个数值的总和。

var total = BigNumber.sum(1, 2, 3); // '6'

实例方法

BigNumber 实例提供了多种方法来进行数值操作和转换。

绝对值

获取 BigNumber 的绝对值。

var x = new BigNumber(-1.5);
var y = x.absoluteValue(); // '1.5'

比较

比较两个 BigNumber 的大小。

var x = new BigNumber(2);
var y = x.comparedTo(1); // 1

四则运算

执行基本的数学运算。

var x = new BigNumber(5);
var y = x.multipliedBy(2); // '10'
var z = x.minus(2); // '3'

整数除法

获取除法的整数部分。

var x = new BigNumber(5);
var y = x.dividedToIntegerBy(2); // '2'

幂运算

计算 BigNumber 的幂。

var x = new BigNumber(2);
var y = x.exponentiatedBy(3); // '8'

取整

四舍五入到最近的整数。

var x = new BigNumber(4.7);
var y = x.integerValue(); // '5'

判断方法

提供一系列方法来判断 BigNumber 的特性。

var x = new BigNumber(-3);
var y = x.isNegative(); // true

转换方法

BigNumber 转换为不同的格式。

var x = new BigNumber(1.23456789);
var y = x.toFixed(3); // '1.235'

格式化

根据指定格式输出 BigNumber

var x = new BigNumber(1234567.891);
var y = x.toFormat(); // '1,234,567.891'

分数形式

BigNumber 转换为分数形式。

var x = new BigNumber(1.75);
var y = x.toFraction(); // ['7', '4']

JSON 序列化

BigNumber 转换为 JSON 字符串。

var x = new BigNumber(1.23456789);
var y = JSON.stringify(x); // '"1.23456789"'

字符串表示

BigNumber 转换为字符串。

var x = new BigNumber(255);
var y = x.toString(16); // 'ff'

原始值

获取 BigNumber 的原始值。

var x = new BigNumber('-0');
var y = x.valueOf(); // '-0'

通过这些方法,bignumber.js 库提供了一种灵活且准确的方式来处理任意精度的数值运算,非常适合金融计算、科学计算等需要高精度的场合。