首页 > 其他分享 >big.js、bignumber.js 和 decimal.js 的区别

big.js、bignumber.js 和 decimal.js 的区别

时间:2024-01-25 10:55:48浏览次数:31  
标签:bignumber big decimal js toString 精度

简介

        本文介绍3个JavaScript的数字处理第三方库的区别,它们是:big.js、bignumber.js 和 decimal.js。

        这三个库都是同一个作者写的。

官网网址

​ ​https://github.com/MikeMcl/big.js/wiki​​

大致对比

  • 包的大小
  1.         big.js < bignumber.js < decimal.js
  2.         big.js 是最小的任意精度的计算库。big.js 是三者中最小也最简单的,它只有 bignumber.js 一半的方法,不到 bignumber.js 的一半大。

功能

big.js
精度采用小数位;精度仅适用除法;4种舍入模式。
bignumber.js
配置选项;NaN;Infinity;精度采用小数位;精度仅适用于除法;随机数字;进制转换;9种舍入模式;模模式;模幂运算。
decimal.js
配置选项;NaN;Infinity;非整数次幂,exp,ln,log;三角函数;精度采用有效数字;所有操作均采取精度;随机数字;9种舍入模式;模模式;二进制,八进制,十六进制;二进制指数符号。

        big.js、bignumber.js 和 decimal.js,这三个库都包含了 JavaScript 中 Number 类型的 toExponential、toFixed 和 toPrecision 方法。

性能

        bignumber.js 和 decimal.js 存储值的进制比 big.js 更高,因此当操作大量数字时,前两者的速度会更快。

使用场景

bignumber.js
适合金融类应用,因为用户不用担心丢失精度,除非使用了涉及除法的操作。
decimal.js
适合科学类应用,因为它可以更有效的处理非常小或者非常大的数值。
例如,它没有 bignumber.js 的限制,即当将一个小指数值和一个大指数值相加时,bignumber.js 将使用完全精度来操作,这可能使得消耗很多时间。

进制

        bignumber.js 和 decimal.js 也支持其它进制的计算,并支持前缀,比如十六进制的 0x。decimal.js 还可以使用二进制指数表示法处理二进制、八进制和十六进制,C 语言中就是如此。

bignumber.js处理十六进制:

var x = new BigNumber('ff.8', 16);
x.toString();          // '255.5'
x.toString(16);        // 'ff.8'

decimal处理八进制、十六进制:

var x = new Decimal('0xff.8');
x.toString();          // '255.5'
x.toHexadecimal();     // '0xff.8'
x.toHex(3);            // '0x1.ffp+7'

big.js
        big.js 中,NAN 或者 Infinity 是不合法值,它不能处理除了十进制以外的其它进制。

        big.js运行时的配置项仅限于设置小数位数、包含除法在内的四舍五入的运算模式,以及 toString 生成的科学计数法的指数值。

Big.DP = 7;             // 最大小数位数
Big.RM = 4;             // round half-up
var x = new Big(5);
x.div(3).toString();    // '1.6666667' 
  • bignumber.js与decimal.js

        decimal.js 最初是通过向 bignumber.js 添加对非整数次幂的支持来开发的,但后续作者决定将它作为一个单独的库来发布。

        decimal.js和bignumber.js的最主要的区别在于:decimal.js 的精度是以有效数字而不是小数位数来指定的,并且所有的计算都舍入到该精度(类似于 Python 的小数模块),而不是只有涉及到除法的运算。

bignumber.js的精度配置

Bignumber.config({ DECIMAL_PLACES: 3, ROUNDING_MODE; 1 });
var x = new BigNumber('123.456789');
x.plus(1).toString();    // '124.456789'

decimal.js的精度配置

Decimal.set({ precision: 7, rounding: 4 });
var y = new Decimal('123.456789');
y.plus(1).toString();    // '124.4568'

decimal.js 还支持非整数次幂、三角函数、exp、ln、log 方法。这些额外的方法使得 decimal.js 比 bignumber.js 大得多。

标签:bignumber,big,decimal,js,toString,精度
From: https://www.cnblogs.com/caihongmin/p/17986687

相关文章

  • decimal.JS 快速入门
    Decimal是什么想必大家在用js处理数字的加减乘除的时候,或许都有遇到过精度不够的问题还有那些经典的面试题02+0.1==0.3至于原因,那就是js计算底层用的是 IEEE754 ,精度上有限制那么,Decimal.js就是帮助我们解决js中的精度失准的问题。Decimal的引入与加减......
  • bigNumber.js使用介绍
    为什么要使用bigNumber.js为了解决精度丢失的问题,前端面试常见的一个问题就是‘0.1+0.2!=0.3’是为什么,0.1+0.2=0.30000000000000004,这在对数字精度要求比较高的项目中常常会出现bug,所以要使用bigNumber.js官网的解释:AJavaScriptlibraryforarbitrary-precisionarithmetic.(......
  • 为啥赋值他就报错JSONDecodeError?
    大家好,我是皮皮。一、前言前几天在Python最强王者交流群【哎呦喂 是豆子~】问了一个Python解析的问题。问题如下:大佬们谁有时间帮忙看下这个情况 好奇怪哦 为啥赋值他就报错JSONDecodeError:Expectingvalue:line1column1(char0)load是load文件,loads才是数据。......
  • 最佳实践:如何发现、修复和防止 Node.js 内存泄漏
    这篇文章将介绍什么是内存泄漏以及如何在Node.js应用程序中避免内存泄漏。什么是内存泄漏?在深入研究内存泄漏的细节之前,有必要先了解什么是内存生命周期。为已定义变量分配内存对分配的内存进行读、写等操作。使用后,释放分配的内存内存泄漏是指当程序没有释放它分配的内存时,即生......
  • 四、iframe切换+alert切换+鼠标操作+js操作
    1、iframe切换iframe是什么在网页中内嵌了另一个html怎么识别iframeF12打开开发者工具,在Element面板中鼠标点击要操作的元素会显示元素的完整路径,检查里面是否存在iframe,html切换进iframe当中去driver.switch_to.frame(几种方法去......
  • js如何数组去重
    在JavaScript中,有多种方法可以实现数组去重。下面是一些常见的数组去重方法:使用Set数据结构:Set数据结构存储唯一的值,可以利用它的特性来去除数组中的重复元素。constarr=[10,20,30,40,50,50];constuniqueArr=[...newSet(arr)];console.log(uniqueArr......
  • vue3中使用animate.css+wow.js
    官网链接:animatewow.js版本声明:"dependencies":{"vue":"^3.3.11","animate.css":"^4.1.1","wow.js":"^1.2.2"},1.安装:npminstallanimate.css--savenpminstallwow.js......
  • sortable.js el-table 树形表 拖拽
    实现的功能:该树形表只有一级子节点该子节点只能在当前父节点中拖拽,不能跨父节点拖拽同时只能展开一个父节点,其他父节点闭合实现的关键点:mounted挂载初始化sortable拖拽完onEnd方法返回的index是整个列表的排序,要扁平化数组调用该方法getTable()后台多返回一个kid,......
  • 用 UNPKG/CDNJS 国内镜像优化网页加载速度
    unpkg.com和cdnjs.cloudflare.com这两个官方域名的加载速度实在令人汗颜。抽了一下午找了些国内能用的高速稳定镜像,批量更换一下就能加速访问了。unpkg用Zstatic的镜像,把原来的unpkg.com换成s4.zstatic.net/npmcdnjs用360或者Zstatic的镜像,把原来的cdnjs.cloudfl......
  • JS中的扩展运算符(...)和剩余运算符(...)
    一、概念在JS中,扩展运算符(spread)是三个点 (...) ,剩余运算符(rest)也是三个点 (...)二、扩展运算符(1)基本使用:扩展运算符的主要作用是将一个数组转为用逗号分隔的参数序列,它好比rest的逆运算//传递数据代替多个字符串的形式functiontest(a,b,c){console.log(a);//1......