关于openharmony:开源三方库bignumberjs一个大数数学库

4次阅读

共计 3385 个字符,预计需要花费 9 分钟才能阅读完成。

OpenHarmony(OpenAtom OpenHarmony 简称“OpenHarmony”)三方库,是通过验证可在 OpenHarmony 零碎上可重复使用的软件组件,可帮忙开发者疾速开发 OpenHarmony 利用。如果是公布到开源社区,称为开源三方库,开发者能够通过拜访开源社区获取。接下来咱们来理解 bignumber.js 开源三方库。

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 包

  1. 导入 bignumber.js
    import BigNumber from "bignumber.js";
  2. 调用接口
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.19999999999999998
x = 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 构造函数,每个构造函数都有本人的独立配置。

源码地址 &ohpm 仓地址

以上就是 bignumber.js 的一些根本介绍,更多详情能够返回源码地址或者 ohpm 仓地址参考 bignumber.js 文档。

参考资料
[如何装置 OpenHarmony ohpm 包]:gitee.com/openharmony…

bignumber.js API:ohpm.openharmony.cn/#/cn/detail…

源码地址:gitee.com/openharmony…

ohpm 地址:ohpm.openharmony.cn/#/cn/detail…

点击关注浏览原文,理解更多资讯

正文完
 0