位置: IT常识 - 正文

JavaScript:解决计算精度问题/mathjs/bignumber.js/big.js/decimal.js(javascript遇到的问题)

编辑:rootadmin
JavaScript:解决计算精度问题/mathjs/bignumber.js/big.js/decimal.js

推荐整理分享JavaScript:解决计算精度问题/mathjs/bignumber.js/big.js/decimal.js(javascript遇到的问题),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:javascript解决网页上的什么,javascript解决跨域,javascript解决网页上的,javascript解决了什么问题,javascript解决手机网页太宽看不到右边,javascript解决网页上的什么问题,javascript解决手机网页太宽看不到右边,Javascript解决页面中出现的中文乱码,内容如对您有帮助,希望把文章链接给更多的朋友!

一、计算精度现象举例

举例1、加法

举例2、减法 

 

举例3、乘法

举例3、除法

二、JS为什么会有计算精度的问题

JavaScript 内部只有一种数字类型Number,也就是说,JavaScript 语言的底层根本没有整数,所有数字都是以IEEE-754标准格式64位浮点数形式储存,1与1.0是相同的。因为有些小数以二进制表示位数是无穷的。JavaScript会把超出53位之后的二进制舍弃,所以涉及小数的比较和运算要特别小心。

IEEE二进制浮点数算术标准(IEEE 754)是20世纪80年代以来最广泛使用的浮点数运算标准,为许多CPU与浮点运算器所采用。这个标准定义了表示浮点数的格式(包括负零-0)与反常值(denormal number)),一些特殊数值(无穷(Inf)与非数值(NaN)),以及这些数值的“浮点数运算符”;它也指明了四种数值舍入规则和五种例外状况(包括例外发生的时机与处理方式)。

三、解决方法

项目技术栈vue3+vite+ts

3.1、方法一,同时扩大倍数再除以相同的倍数

(x * 10 ^ n + y * 10 ^ n)/ 10 ^ n

0.1 +0.2// 0.30000000000000004(0.1 *10 + 0.2 *10) / 10// 0.3

3.2、方法二,toFixed保留小数位数,依然存在精度问题

3.3、方法三,mathjs - npm

pnpm add mathjs

Weekly Download 580197 (20230324) 

方法运算使用运输结果

add

加法

add(1, 2)

3

subtract

减法

subtract(2, 1)

1

multiply

乘法

multiply(2, 2)

4

divide

除法

divide(4, 2)

2

round

四舍五入

round(4.01)

4

bignumber

转换为bigNumber类型。对于具有任意精度的计算,math.js支持BigNumber数据类型,bignumber返回一个Decimal类,精度依然难以保证

bignumber(4.01)

evaluate

直接运算表达式

evaluate('(4.01 + 3) / 2')

3.505

sqrt

平方根计算

sqrt(4)

2

pow

x 的 y 次幂值pow(3,3)27

chain

链式操作

chain(3).add(4).multiply(2).done()

14

atan2

返回其参数商的反正切值

atan2(15,30)

0.4636476090008061log返回给定数字的自然Log值(即e的底数)

log(9)

2.1972245773362196

pi

圆周率

console.log('pi:', pi)

3.141592653589793e欧拉常数和自然对数的基数,约为 2.718

console.log('e:', e)

2.718281828459045

derivative

待考证

console.log('derivative:',derivative('x^2 + x', 'x'))

matrix

矩阵操作

matrix([0, 1, 2,  3, 4])

3.4、方法四,bignumber.js - npm

Weekly Download 8826960 (20230324) 

pnpm add bignumber.js

const num = new BigNumber(1234567890.0123456789)

const num1 = new BigNumber(123.123)

方法运算使用运算结果

toFormat

格式化

num.toFormat()

1,234,567,890.0123458 保留了七位小数,第七位依据第八位四舍五入

toFormat

格式化

num.toFormat(3)

1,234,567,890.012 保留三位小数

toFormat

格式化

num.toFormat(13)

1,234,567,890.012 保留十三位小数,实际还是保留了七位小数,第七位依据第八位四舍五入,然后位数用0补足

plus

加法

num1.plus(1.1)

minus

减法

num1.minus(1.1)

times

乘法

num1.times(2)

div

除法

num1.div(2)

mod

取余

num1.mod(2)

x.eq(y)

isEqualTo--是否相等

num.eq(num1)

false

x.gt(y)

JavaScript:解决计算精度问题/mathjs/bignumber.js/big.js/decimal.js(javascript遇到的问题)

isGreaterThan--是否大于

num.gt(num1)

true

x.gte(y)

isGreaterThanOrEqualTo--是否大于等于

num.gte(num1)

true

x.lt(y)

isLessThan--是否小于

num.lt(num1)

false

x.lte(y)

isLessThanOrEqualTo--是否小于等于

num.lte(num1)

false

negated

取非,改变数字的正负号

num.negated()

3.5、方法五,big.js - npm

Weekly Download 21,339,420 (20230324) 

pnpm add @types/big.js

const num = new Big(1234567890.0123456789)

const num1 = new Big(123.123)

方法运算使用运算结果

plus

加法

num1.plus(1.1)

minus

减法

num1.minus(1.1)

times

乘法

num1.times(2)

div

除法

num1.div(2)

mod

取余

num1.mod(2)

x.eq(y)

isEqualTo--是否相等

num.eq(num1)

false

x.gt(y)

isGreaterThan--是否大于

num.gt(num1)

true

x.gte(y)

isGreaterThanOrEqualTo--是否大于等于

num.gte(num1)

true

x.lt(y)

isLessThan--是否小于

num.lt(num1)

false

x.lte(y)

isLessThanOrEqualTo--是否小于等于

num.lte(num1)

false

3.6、方法六,decimal.js - npm

Weekly Download 16,251,713 (20230324) 

pnpm add decimal.js

 const num = new Big(1234567890.0123456789)

const num1 = new Big(123.123)

方法运算使用运算结果

plus

加法

num1.plus(new Decimal(1.1))

minus

减法

num1.minus(new Decimal(1.1))

times

乘法

num1.times(new Decimal(2))

div

除法

num1.div(new Decimal(2))

mod

取余

num1.mod(new Decimal(2))

x.eq(y)

isEqualTo--是否相等

num.eq(num1)

false

x.gt(y)

isGreaterThan--是否大于

num.gt(num1)

true

x.gte(y)

isGreaterThanOrEqualTo--是否大于等于

num.gte(num1)

true

x.lt(y)

isLessThan--是否小于

num.lt(num1)

false

x.lte(y)

isLessThanOrEqualTo--是否小于等于

num.lte(num1)

false

四、欢迎交流指正,关注我,一起学习。

参考链接:

JavaScript Math 参考手册

本文链接地址:https://www.jiuchutong.com/zhishi/274334.html 转载请保留说明!

上一篇:如何解决连接宽带出现错误691的情况?(如何解决连接宽带的方法)

下一篇:Linux中的文件压缩命令tar与rar的用法总结(linux系统文件压缩命令)

  • 怎样关闭icloud不失去照片(怎么能关闭icloud)

    怎样关闭icloud不失去照片(怎么能关闭icloud)

  • ios15.3可以戴口罩解锁吗(ios14.5可以戴口罩支付吗)

    ios15.3可以戴口罩解锁吗(ios14.5可以戴口罩支付吗)

  • 华为荣耀20青春版闪屏(华为荣耀20青春版图片)

    华为荣耀20青春版闪屏(华为荣耀20青春版图片)

  • opporeno特殊功能(oppo reno功能)

    opporeno特殊功能(oppo reno功能)

  • 苹果查找位置刷新不了(苹果查找位置刷新不过来)

    苹果查找位置刷新不了(苹果查找位置刷新不过来)

  • 标压r5是什么意思(标压r7什么意思)

    标压r5是什么意思(标压r7什么意思)

  • imessage记录怎么查

    imessage记录怎么查

  • 文件系统阶段的主要特点(文件系统阶段的特点有?)

    文件系统阶段的主要特点(文件系统阶段的特点有?)

  • 手机里面的软件缓存可以进行清理吗(手机里面的软件删除了怎么恢复)

    手机里面的软件缓存可以进行清理吗(手机里面的软件删除了怎么恢复)

  • 抖音商品类目可以更改吗(抖音商品类目可以修改吗)

    抖音商品类目可以更改吗(抖音商品类目可以修改吗)

  • vivo怎么信任软件(vivo手机怎样信任软件)

    vivo怎么信任软件(vivo手机怎样信任软件)

  • 抖音如何设置不让合拍(抖音如何设置不把自己的好友推荐给别人)

    抖音如何设置不让合拍(抖音如何设置不把自己的好友推荐给别人)

  • mate20开启无线充电(华为mate20怎么无线充)

    mate20开启无线充电(华为mate20怎么无线充)

  • 京东我的预约怎么取消(京东我的预约怎么抢比较快)

    京东我的预约怎么取消(京东我的预约怎么抢比较快)

  • 快手直播人数在哪显示(快手直播人数在线刷)

    快手直播人数在哪显示(快手直播人数在线刷)

  • 抖音被拉小黑屋怎么办大概要封多少时间(抖音被拉小黑屋出来还有用吗)

    抖音被拉小黑屋怎么办大概要封多少时间(抖音被拉小黑屋出来还有用吗)

  • airpods怎么彻底关掉(airpods怎么彻底改名)

    airpods怎么彻底关掉(airpods怎么彻底改名)

  • 微信聊天记录怎么恢复(微信聊天记录怎么转发)

    微信聊天记录怎么恢复(微信聊天记录怎么转发)

  • 拼多多省钱月卡怎么关闭(拼多多省钱月卡免费领取3个月怎么取消)

    拼多多省钱月卡怎么关闭(拼多多省钱月卡免费领取3个月怎么取消)

  • 苹果a1446是哪年(苹果13是a)

    苹果a1446是哪年(苹果13是a)

  • 怎样查支付宝全年消费(怎样查支付宝全部账单)

    怎样查支付宝全年消费(怎样查支付宝全部账单)

  • 如何在电脑上制作一寸照片(如何在电脑上制作电子版文件)

    如何在电脑上制作一寸照片(如何在电脑上制作电子版文件)

  • 微信步数关注别人对方会知道吗(微信步数关注别人怎么弄)

    微信步数关注别人对方会知道吗(微信步数关注别人怎么弄)

  • macos13支持设备机型详情(macos12支持设备)

    macos13支持设备机型详情(macos12支持设备)

  • lxml&xpath一站式教学

    lxml&xpath一站式教学

  • Python CNN卷积神经网络实例讲解,CNN实战,CNN代码实例,超实用(cnn卷积神经网络python代码)

    Python CNN卷积神经网络实例讲解,CNN实战,CNN代码实例,超实用(cnn卷积神经网络python代码)

  • 税务师都有什么科目
  • 公司收到分红怎么交税
  • 暂缓收缴工会经费的请示
  • 季度所得税可以零申报吗
  • 办理会员卡套路消费
  • 权益资本成本率计算
  • 多交税费退税会计处理
  • 水利建设专项收入的税率是多少?
  • 中央财政补贴政策
  • 代收款项属于收入范围吗
  • 增值税减免税如何处理
  • 销售不动产增值税税率变化
  • 银行呆帐坏账
  • 退租水电费从押金里扣除
  • 自购自销金银首饰应纳消费税如何处理?
  • intelin
  • 小型微利企业所得税率
  • 给员工支付的房租怎么算
  • 电脑管家浏览器保护怎么取消
  • 在线网速测试需要付费吗
  • 销售返点的账务怎么处理
  • pos机刷卡怎么做账务处理
  • php使用memcache
  • WIN7系统如何共享打印机
  • 如何防止电子发票重复报销
  • 高新技术企业产品是什么意思
  • 进项税额不得抵扣的情况有哪些
  • 中科院t1
  • 固定资产和无形资产计提折旧时间
  • vue富文本编辑器移动端
  • 2019年新会计制度改革
  • 审计招标费包含哪些内容
  • system error
  • 个人出租租房交什么税
  • 专票和普票都有发票吗
  • 房屋出租 交税
  • 建账在1月份如何录入期初
  • 车间用的液化气计入什么科目
  • 企业税金及附加包括什么
  • 资产处置损益的定义
  • 报废车残值需要多少钱
  • 在资产减值准备中符合条件可以转回的有
  • 小规模纳税人税收政策2023
  • 高工资的工资
  • 补缴以前年度的增值税以及附加税,还有罚款的账务处理
  • 研发支出属于什么要素
  • 英飞拓拟2.1亿出售子公司股权
  • 营改增对建筑业税负的影响
  • 内账税金如何做分录
  • 购买材料时如果没有取得购买材料的发票
  • 跨月的发票还能入账吗
  • 个人承包工程如何缴纳税款
  • 管理费用包括哪些
  • 小微企业即征即退
  • mysql内存占用一直增高不释放
  • centos vim编辑器
  • 双硬盘无法进入bios
  • 在microsoft store
  • winxp注销快捷键
  • win7系统开启无线服务
  • win1020th2
  • 怎么制作xp系统
  • Win10预览版拆弹
  • cocos2d-x起点之程序的入口
  • z-blog SyntaxHighlighter 长代码无法换行解决办法(基于jquery)
  • linux的安装
  • opengl绘制一个矩形
  • jquery左侧导航栏
  • python整理表格不用入门
  • 使用nodejs开发后端
  • javascript教学视频
  • jQuery简单实现tab选项卡切换效果
  • python搭建平台
  • python,多线程
  • 苏州买房退契税政策2023
  • 宁波国税局几点上班几点下班
  • 重庆电子税务局怎么绑定办税人员
  • 建筑工程开票要在项目所在地
  • 税务ca证书过期
  • 双公开双反馈什么意思
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设