【开源三方库】bignumber.js:一个大数数学库

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";

  1. 调用接口

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 包

bignumber.js API:

源码地址:

ohpm地址:

点击关注阅读原文,了解更多资讯

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/45841.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

QT学习笔记-Linux ARM环境下实现QT程序通过ODBC驱动访问SQLServer数据库

QT学习笔记-Linux ARM环境下实现QT程序通过ODBC驱动访问SQLServer数据库 0、背景1、基本环境2、搭建交叉编译环境3、在交叉编译服务器上交叉编译安装unixODBC3.1 下载unixODBC3.2 交叉编译unixODBC3.2.1 基本编译说明3.2.2 交叉编译说明3.2.3 ./configure -build,-host,-target…

设计模式8:代理模式-静态代理

我尝试在JDK、Android SDK和一些出名的库中,寻找静态代理的源码,没能找到。如果有读者发现,欢迎评论或者私信我。 本文目录 静态代理的实例1. 售票代理2. 明星代理 静态代理的实例 1. 售票代理 售票服务 public interface TicketService {…

不知道开黑语音哪个软件好?

黑盒语音官方网站:https://chat.top 免费支持AI降噪免费支持高品质立体声免费支持码率128Kbps,192Kbps免费支持上传100M文件免费支持动态房间头像和横幅支持更多自定义动态表情即将支持更多免费功能

IP 地址监控工具

地址监控实用程序是一套 IP 工具,包括 IP 地址监控工具、流氓检测工具和 MAC 地址解析器,用于日常监控和管理 DNS 名称、IP和 MAC 地址。地址监控工具用于 IP监控,用于管理 DNS 名称、网络的 IP 和 MAC 地址,并跟踪 IP 地址。 IP…

博冠光电8K事业部招聘研发工程师及产品经理

一、高级结构工程师 工作职责:1、负责公司产品的机械结构设计、模具开发和量产导入;2、负责机械结构方向的技术预研,包括技术专题研究,技术难题攻关; 3、负责结构组的技术管理工作,包括带新人,…

字符串拼接操作的面试题讲解

1、字符串拼接操作 常量与常量的拼接结果在常量池,原理是编译期优化。String s1"a""b""c";常量池中不会存在相同内容的常量。只要其中有一个是变量,结果就在 堆 中。变量拼接的原理是StringBuilder。如果拼接符号的前后出…

JavaScript中的this关键字的作用,以及它如何确定其值

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ this关键字的作用⭐ this的值取决于执行上下文⭐ 示例⭐ 总结⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅!这…

MySQL数据库第十四课--------sql优化---------层层递进

作者前言 🎂 ✨✨✨✨✨✨🍧🍧🍧🍧🍧🍧🍧🎂 ​🎂 作者介绍: 🎂🎂 🎂 🎉🎉&#x1f389…

极光笔记 | 如何为您的业务开发和训练一个AI-BOT

生成式AI(Generative AI)是当今科技领域的前沿技术之一。随着数据量的不断增加和计算能力的不断提升,AI技术在企业和个人生活中的应用越来越广泛。AI-BOT(以下简称BOT)是生成式AI技术的其中一种重要的应用形式&#xf…

最小二乘拟合圆柱

目录 一、算法原理二、代码实现 本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。 一、算法原理 由圆柱面的几何特性可得,圆柱面上的点到其轴线的距离恒等于半径 r 0 r_0 r0​,…

Java自学到什么程度就可以去找工作了?

引言 Java作为一门广泛应用于软件开发领域的编程语言,对于初学者来说,了解到什么程度才能开始寻找实习和入职机会是一个常见的问题。 本文将从实习和入职这两个方面,分点详细介绍Java学习到什么程度才能够开始进入职场。并在文章末尾给大家安…

基于springboot+vue的博物馆藏品平台(前后端分离)

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容:毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…

剑指 Offer 48. 最长不含重复字符的子字符串(C++实现)

剑指 Offer 48. 最长不含重复字符的子字符串https://leetcode.cn/problems/zui-chang-bu-han-zhong-fu-zi-fu-de-zi-zi-fu-chuan-lcof/ dp 注意:缩小 不含重复字符子串 时的写法 dp_1 min(i - charToIndex[s[i]], dp_0 1); int lengthOfLongestSubstring(string s…

python中使用xml快速创建Caption和URL书签管理器应用程序

导语: 本文介绍如何使用wxPython库创建一个Caption和URL管理器应用程序。该应用程序具有图形用户界面,允许用户输入Caption和URL,并将其保存到XML文件中。此外,还提供了浏览文件夹并选择HTML文件的功能,并可以运行另一…

深入解析淘宝API,实现高效商务应用

淘宝API的基本调用 1. API文档与SDK 淘宝API官方提供了详细的API文档,包含了API的使用说明、参数列表、示例代码等内容。开发者可以通过文档了解每个API接口的具体功能和使用方法。此外,淘宝API还提供了多种编程语言的SDK,方便开发者进行快速…

jupyter notebook出现ERR_SSL_VERSION_OR_CIPHER_MISMATCH解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

c#扩展方法的使用

扩展方法可以向现有类型“添加”方法,无需创建新的派生类型、重新编译或以其他方式修改原始类型,用起来很方便,下面是我写的例子,为string这个常用的类型添加一个showmes方法,以下是扩展方法的代码: public…

python爬虫9:实战2

python爬虫9:实战2 前言 ​ python实现网络爬虫非常简单,只需要掌握一定的基础知识和一定的库使用技巧即可。本系列目标旨在梳理相关知识点,方便以后复习。 申明 ​ 本系列所涉及的代码仅用于个人研究与讨论,并不会对网站产生不好…

Linux中shell脚本——for、while循环及脚本练习

目录 一.for循环 1.1.基本格式 1.2.类C语言格式 二.while循环 2.1.基本格式 2.2.死循环语句 三.跳出循环 3.1.continue跳出循环 3.2.break跳出循环 四.常用循环 4.1.循环打印九九乘法表 4.2.循环ping测试某个网段网络连通性 4.3.while死循环实现猜数字游戏 4.4.数…

Linux的热拔插UDEV机制

文章目录 UDEV简介守护进程基本特点 守护进程和后台进程的区别开发守护进程结束 UDEV简介 udev是一个设备管理工具,udev以守护进程的形式运行,通过侦听内核发出来的uevent来管理/dev目录下的设备文件。 udev在用户空间运行,而不在内核空间 …