分享好友 行情首页 行情分类 切换频道
bigNumber.js使用介绍
2024-12-24 09:06  浏览:95

为什么要使用bigNumber.js
为了解决精度丢失的问题,前端面试常见的一个问题就是‘0.1+0.2!=0.3’是为什么,0.1+0.2 = 0.30000000000000004,这在对数字精度要求比较高的项目中常常会出现bug,所以要使用bigNumber.js
官网的解释:A JavaScript library for arbitrary-precision arithmetic.(用于任意精度算术的JavaScript库。)

精度为什么丢失?
0.1+0.2 = 0.30000000000000004

数据存储方式:js遵循国际 IEEE 754 标准,将数字存储为双精度浮点数。这种格式以 64 位存储数字,其中数字(分数)存储在位 0 到 52 中,指数存储在位 53 到 62 中,符号存储在位 63(正数为0负数为1) 中。整数的表示范围就是 -2^53 到 2^53 之间 。
十进制整数转二进制方法:除2取余;十进制小数转二进制方法:乘2取整:
0.1 * 2 = 0.2 # 0
0.2 * 2 = 0.4 # 0
0.4 * 2 = 0.8 # 0
0.8 * 2 = 1.6 # 1
0.6 * 2 = 1.2 # 1
0.2 * 2 = 0.4 # 0
从上面可以看出,0.1的二进制格式是:0.0001100011…。这是一个二进制无限循环小数,取前52位,所以一些小数存在计算机中天然就存在舍入误差
计算机存储数据用的是二进制存储十进制,一些十进制的小数在存储为二进制的时候回变成无限小数。而js遵循国际IEEE754标准,将数字存储为双精度浮点数,这种格式以64位存储格式,数字存储在0到51位中,指数存储在52到62位中,符号位存储在63位中。所以二进制的无限小数只能存储前52位,(转换为10进制就是前17位)后面的位数被舍入了,在相加的过程中存在舍入误差。0.1+0.1===0.2的原因?存储的过程中也存在舍入误差,只是恰好等于0.2后面16个0
安装bigNumber.js
1、下载地址:
https://github.com/MikeMcl/bignumber.js/releases
2、安装命令:

3、引入

一、BigNumber构造

BigNumber构造如下

二、静态方法

备注:以下标题的格式如下: 方法全称 && 方法简称 方法作用

1、absoluteValue && .abs() 取绝对值
2、comparedTo && isEqualTo 比较大小

两个都是表示,功能略有差异

comparedTo方法:y>x,返回1;y<x,返回-1;y===x,返回0,x为NaN时,返回NaN。

bigNumber.js使用介绍

isEqualTo方法是在comparedTo方法的基础上实现的,x和y相等返回true,不等返回false

3、decimalPlaces && .dp(num,rm) 保留小数位
rm:指的是小数位的舍入方式,后文与之相同

4、dividedBy && .div(num,base) 除

base:指的是数字的进制,后文与之相同

5、dividedToIntegerBy && .idiv(num,base) 整除

只取商的整数部分

6、exponentiatedBy && .pow(n) 指数运算

7、.integerValue(rm) 取整数

8、.isFinite() 判断Infinity 返回布尔值

9、.isGreaterThan && .gt(num,base) 判断是否更大

10、.isGreaterThanOrEqualTo && .gte(num,base) 判断是否大于等于
11、.isInteger() 判断是否是整数 返回布尔值
12、.isLessThan && .lt(num,base) 判断是否小于
13、.isLessThanOrEqualTo && .lte(num,base) 判断是否小于等于
14、.isNaN()判断是否是NaN 返回布尔值
15、.isNegative()判断是否是负数 返回布尔值
16、.isPositive()判断是否是正数 返回布尔值
17、.isZero判断是否是0 返回布尔值
18、.minus(num,base) 减数运算

19、.modulo && .mod(num,base) 取余

20、multipliedBy&&.times(num,base) 乘法运算

21、.negated() 取负值

22、.plus() 加

23、.precision() &&.sd()保留小数位

.sd()
.sd(boolean)
.sd(num,rm)

  • 不传参:返回数字的位数(不计首尾的0)
  • 参数为true:返回数字的有效位数(包括尾部的0)
  • 参数为数字num,保留的有效位数
  • rm:当有参数num时生效,保留位数的模式,默认是四舍五入

24、.shiftedBy(n) 小数点移位

参数n:小数点移动的位数,正数向右移动,负数向左移动

25、.squareRoot() && .sqrt() 开根号

26、.toExponential() 科学计数法

.toExponential(dp,rm)

dp:保留小数位
rm:保留位数的模式,默认是四舍五入

27、.toFixed(dp,rm) 保留小数位

dp:保留小数位
rm:保留位数的模式,默认是四舍五入

28、.toFormat(dp,rm,format) 数据格式化

dp:保留小数位
rm:保留位数的模式,默认是四舍五入
format:自定义要格式化的数据格式

29、.toFraction(max) 小数转分数

备注:以数组形式返回[分子,分母],数据以BigNumber格式返回
max:分母最大不能超过max

30、.toJSON() 转换为字符串

31、.toNumber() 转换为数字

转换为非BigNumber格式的数字

32、.toPrecision() 保存精度
33、.toString() 转换为字符串
34、.valueOf() 转换为字符串

官方地址

BigNumber 官方API

    以上就是本篇文章【bigNumber.js使用介绍】的全部内容了,欢迎阅览 ! 文章地址:http://w.yusign.com/quote/4051.html 
     行业      资讯      企业新闻      行情      企业黄页      同类资讯      网站地图      返回首页 述古往 http://w.yusign.com/mobile/ , 查看更多   
最新新闻
微信视频号直播广告如何投放
我们现在发现很多企业做微信视频号的直播都要投广告了,没错,通过广告定向投放人群能将精准客户吸引到直播间,再通过主播的带货
IE浏览器软件哪个好 常用的IE浏览器软件排行
在这篇文章中,我们将深入探讨IE浏览器软件的热门选择及其在市场上的常用排行。无论是经典版本还是后续更新,你会了解到哪些浏览
Windows Phone 上的触控手势
下载代码示例当然,对于一种相对仍很年轻的技术来说,存在这么多的触控 API 也不足为奇。而且,多点触控比鼠标要复杂得多。这部
六年级上册16课夏天里的成长评课稿听课记录
六年级上册16课夏天里的成长评课稿听课记录一、读单元页,明确任务师:今天我们来学习第五单元,第五单元是一个习作单元。在这一
影视解说文案自动生成器-影视解说文案自动生成器2.50
在数字化时代的浪潮下,影视行业迎来了前所未有的发展机遇。随着影视作品的增多,怎样为这些作品打造出引人入胜的解说文案,成为
适合发朋友圈的句子大全11篇
【#好词好句# #适合发朋友圈的句子大全11篇#】旅行可以放松自己的心情,宽阔自己的心境,忘掉不顺心,迎接新的开心。旅行是在寻
从零开始学OPERA操作系统
1、房间查找 包括以下内容房间的状态分10种类型所有房间干净,经主管检查有问题,待查房干净房脏房一 快捷键的操作1 F1 OPERA HE
生成式AI为高级分析提供了新的可能性
生成式人工智能(genai) 的出现为工业过程分析带来了令人兴奋的新前景。这项变革性技术可以根据用户的提示生成新的文本、代码和图
阿里P9的真实生活!年薪300万却活得像穷人,依然生活在温饱线上……
  阿里巴巴是许多人梦想的工作地方。  在阿里,P9的年薪甚至高达300万。  他说,他的生活标准,其实并不高,只是跟随着收
本企业新闻
推荐企业新闻
发表评论
0评