简介
bignumber.js是一个数学库,用于任意精度十进制和非十进制算术的 JavaScript库。
特点
• 整数和小数。
• 简单的API,但功能齐全。
• 比Java的BigDecimal JavaScript版本更快,更小,也许更容易使用。
• 8 KB缩小和压缩。
• 复制JavaScript的Number类型的、和方法toExponential、toFixed、toPrecision、toString。
• 包括一个和正确舍入的方法toFraction squareRoot。
• 支持加密安全的伪随机数生成。
• 无依赖关系。
• 广泛的平台兼容性:仅使用JavaScript 1.5 (ECMAScript 3)功能。
使用场景
JavaScript因为存在计算的精度问题,所以直接计算就可能会导致各种各样的bug,为了解决这个问题,就可以使用BigNumber.js这个库。它的大概原理是将所有数字当做字符串,重新实现了计算逻辑。
使用示例
1.安装bignumber.js
ohpm install bignumber.js
OpenHarmony ohpm环境配置等更多内容,请参考如何安装 OpenHarmony ohpm包
2.导入bignumber.js
import BigNumber from "bignumber.js";
3.调用接口
let x = new BigNumber(123.4567);let y = BigNumber('123456.7e-3');let z = new BigNumber(x);expect(x).assertEqual(y);expect(y).assertEqual(z);expect(x).assertEqual(z);
该库导出单个构造函数BigNumber,该函数接受Number、String或BigNumber类型的值。
let x = new BigNumber('1111222233334444555566');x.toString(); // "1.111222233334444555566e+21"x.toFixed(); // "1111222233334444555566"
要获取BigNumber的字符串值,请使用toString()或toFixed()。
//使用超过15个有效数字的数字文字会导致精度损失。new BigNumber(1.0000000000000001) // '1'new BigNumber(88259496234518.57) // '88259496234518.56'new BigNumber(99999999999999999999) // '100000000000000000000'//使用数值范围之外的数字文字会导致精度损失。new BigNumber(2e+308) // 'Infinity'new BigNumber(1e-324) // '0'//Number值的算术运算的意外结果导致精度损失。new BigNumber(0.7 + 0.1) // '0.7999999999999999'
如果不太了解数字值的有限精度,建议从字符串值而不是数字值创建 BigNumbers,以避免潜在的精度损失。
new BigNumber(Number.MAX_VALUE.toString(2), 2)
从数字创建大数时,请注意,大数是从数字的十进制值创建的,而不是从其基础二进制值创建的。如果需要后者,则传递Number的值并指定基数2.toString()或toString(2)。
a = new BigNumber(1011, 2) // "11"b = new BigNumber('zz.9', 36) // "1295.25"c = a.plus(b)
可以从 2 到 36 的基数中的值创建大数字。请参阅ALPHABET以扩展此范围。
0.3 - 0.1 // 0.19999999999999998x = new BigNumber(0.3)x.minus(0.1) // "0.2"x // "0.3"
如果未为十进制值指定基数10,则性能更好。仅当要将输入值的小数位数限制为当前INK http://mik设置时,才指定基数10。BigNumber是不可变的,因为它不会被其方法更改。
x.dividedBy(y).plus(z).times(9)x.times('1.23456780123456789e+9').plus(9876.5432321).dividedBy('4444562598.111772').integerValue() // "0.3"
返回BigNumber的方法可以链接。
x = new BigNumber(255.5)x.toExponential(5) // "2.55500e+2"x.toFixed(5) // "255.50000"x.toPrecision(5) // "255.50"x.toNumber() // 255.5
BigNumber与JavaScript的Number类型一样,有toExponential,toFixed和toPrecision方法。
x.toString(16) // "ff.8"
可以为toString指定基数。
如果没有指定基数10,即使用toString()而不是toString(10),则性能会更好。如果要将字符串的小数位数限制为当前的DECIMAL_PLACES设置,请仅指定基数10。
y = new BigNumber('1234567.898765')
y.toFormat(2) // "1,234,567.90"
有一种toFormat方法可能对国际化有用。
y = new BigNumber(355)
pi = y.dividedBy(113) // "3.1415929204"
pi.toFraction() // [ "7853982301", "2500000000" ]
pi.toFraction(1000) // [ "355", "113" ]
有一个toFraction方法,它有一个可选的最大分母参数。
x = new BigNumber(NaN) // "NaN"
y = new BigNumber(Infinity) // "Infinity"
x.isNaN() && !y.isNaN() && !x.isFinite() && !y.isFinite()
以及isNaN和isFinite方法,因为和是有效值。NaN、Infinity、BigNumber。
x = new BigNumber(-123.456);
x.c // [ 123, 45600000000000 ] coefficient (i.e. significand)
x.e // 2 exponent
x.s // -1 sign
BigNumber的值以系数、指数和符号的十进制浮点格式存储。
//为原始BigNumber构造函数设置DECIMAL_LACES
BigNumber.set({ DECIMAL_PLACES: 10 })
// 创建另一个BigNumber构造函数,可选地传入配置对象
BN = BigNumber.clone({ DECIMAL_PLACES: 5 })
x = new BigNumber(1)
y = new BN(1)
x.div(3) // '0.3333333333'
y.div(3) // '0.33333'
为了高级使用,可以创建多个BigNumber构造函数,每个构造函数都有自己的独立配置。
写在最后
●如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我两个小忙:
●点赞,转发,有你们的 『点赞和评论』,才是我创造的动力。
●关注小编,同时可以期待后续文章ing ,不定期分享原创知识。