0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

OpenAtom OpenHarmony 来源:未知 2023-08-18 21:05 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

点击蓝字 ╳ 关注我们


开源项目 OpenHarmony
是每个人的 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

ohpminstallbignumber.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//-1sign

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 包

https://gitee.com/openharmony-tpc/docs/blob/master/OpenHarmony_har_usage.md

bignumber.js API

https://ohpm.openharmony.cn/#/cn/detail/bignumber.js

源码地址

https://gitee.com/openharmony-tpc/openharmony_tpc_samples/tree/master/bignumberjsDemo

ohpm地址

https://ohpm.openharmony.cn/#/cn/detail/bignumber.js



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

文章出处:【微信公众号:OpenAtom OpenHarmony】欢迎添加关注!文章转载请注明出处。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 鸿蒙
    +关注

    关注

    60

    文章

    2858

    浏览量

    45355
  • OpenHarmony
    +关注

    关注

    31

    文章

    3926

    浏览量

    20720

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

文章出处:【微信号:gh_e4f28cfa3159,微信公众号:OpenAtom OpenHarmony】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    货拉拉开源两款三方,为鸿蒙应用高效开发贡献力量

    、可扩展的通用工具,持续提升鸿蒙应用的创新体验与开发效率。 在这生态共建的浪潮中,货拉拉积极贡献了其在鸿蒙应用开发过程中的宝贵经验与技术积累,开源了两款实用三方——AspectPr
    的头像 发表于 08-26 14:02 402次阅读
    货拉拉<b class='flag-5'>开源</b>两款<b class='flag-5'>三方</b><b class='flag-5'>库</b>,为鸿蒙应用高效开发贡献力量

    基于开源鸿蒙的语音识别及语音合成应用开发样例

    本期内容由AI Model SIG提供,介绍了在开源鸿蒙中,利用sherpa_onnx开源三方进行ASR语音识别与TTS语音合成应用开发的流程。
    的头像 发表于 08-25 14:26 3586次阅读
    基于<b class='flag-5'>开源</b>鸿蒙的语音识别及语音合成应用开发样例

    鸿蒙非侵入式弹窗新解法,企查查正式开源“QuickDialog”弹窗组件

    近日,企查查将其自研的鸿蒙弹窗组件“QuickDialog”开源,并上线至 OpenHarmony 三方中心仓。这是鸿蒙生态首个支持“弹窗堆栈暂存能力”的非侵入式弹窗解决方案,凭借
    的头像 发表于 07-31 10:40 532次阅读
    鸿蒙非侵入式弹窗新解法,企查查正式<b class='flag-5'>开源</b>“QuickDialog”弹窗组件<b class='flag-5'>库</b>

    飞书富文本组件RichTextVista开源

    近日,飞书正式将其自研的富文本组件 RichTextVista(简称“RTV”)开源,并上线OpenHarmony 三方中心仓。该组件以领先的性能、流畅的渲染体验与高度的开放性,为
    的头像 发表于 07-16 16:47 760次阅读

    开源鸿蒙应用技术组件共建计划启动

    通过兼容性测评,覆盖金融、交通、教育、医疗、航天等多个行业领域,已成为发展速度最快的开源操作系统之。截至目前,开源鸿蒙已累计发布 8 个大版本,共建共享15
    的头像 发表于 06-05 14:33 829次阅读

    贡献 OpenHarmony 关键配置

    # 贡献 OpenHarmony 关键配置 #自研框架#ArkUI-X#三方框架#OpenHarmony#HarmonyOS ## 创建第三方 - 打开 DevEco Stud
    发表于 05-28 13:46

    基于RV1126开发板移植NCNN部署方法

    移动端优化的开源神经网络推断。能实现无第三方依赖,跨平台操作,在手机端CPU运算速度在开源框架中处于领先水平。基于该平台,开发者能够轻松将深度学习算法移植到手机端,输出高效的执行,进
    的头像 发表于 04-16 15:24 470次阅读
    基于RV1126开发板移植NCNN部署<b class='flag-5'>库</b>方法

    鸿蒙文件传输三方上线开源鸿蒙社区 十行代码实现大文件高速传输

    近日,华为在OpenHarmony社区上线了“super_fast_file_trans”文件传输三方(以下简称“SFFT”)。这一三方的推出,为开发者提供了
    发表于 03-06 10:29

    摩尔线程完成DeepSeek开源FlashMLA和DeepGEMM适配

    自DeepSeek启动“开源周”以来,已陆续开源三个代码。摩尔线程基于全新MUSA Compute Capability 3.1计算架构,可提供原生FP8计算能力,同时升级了高性能线
    的头像 发表于 02-27 14:40 1108次阅读

    沐曦GPU跑通DeepSeek开源代码FlashMLA

    今日,DeepSeek正式启动"开源周"计划,首发代码FlashMLA开源即引发全网关注。截至发稿,该项目已在GitHub斩获超7.2K Star!
    的头像 发表于 02-25 16:25 1326次阅读

    AI开源模型有什么用

    AI开源模型作为推动AI技术发展的重要力量,正深刻改变着我们的生产生活方式。接下来,AI部落小编带您了解AI开源模型有什么用。
    的头像 发表于 02-24 11:50 884次阅读

    MySQL数据的安装

    MySQL是开源免费的关系型数据管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下公司。 MySQL 最流行的关系型数据
    的头像 发表于 01-14 11:25 860次阅读
    MySQL数据<b class='flag-5'>库</b>的安装

    EE-303:将VisualDSP线程安全与第三方RTOS配合使用

    电子发烧友网站提供《EE-303:将VisualDSP线程安全与第三方RTOS配合使用.pdf》资料免费下载
    发表于 01-07 14:09 0次下载
    EE-303:将VisualDSP线程安全<b class='flag-5'>库</b>与第<b class='flag-5'>三方</b>RTOS配合使用

    AKI跨语言调用神助攻C/C++代码迁移至HarmonyOS NEXT

    跨语言调用,成为开发者和厂商面临的重要挑战。为解决这痛点,款名为AKI (Alpha Kernel Interacting)的开源三方
    发表于 01-02 17:08

    开源AI模型是干嘛的

    开源AI模型是指那些公开源代码、允许自由访问和使用的AI模型集合。这些模型通常经过训练,能够执行特定的任务。以下,是对开源AI模型的详细
    的头像 发表于 12-14 10:33 1288次阅读