位置: 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系统文件压缩命令)

  • 腾讯会议怎么播放PPT(腾讯会议怎么播放电脑里面的声音)

    腾讯会议怎么播放PPT(腾讯会议怎么播放电脑里面的声音)

  • 华为mate20x手机的通讯录黑名单在哪里

    华为mate20x手机的通讯录黑名单在哪里

  • b站牌子怎么弄(b站牌子在哪里设置)

    b站牌子怎么弄(b站牌子在哪里设置)

  • 不能用鼠标点击的是什么(鼠标点击器)

    不能用鼠标点击的是什么(鼠标点击器)

  • 淘宝点错了确认收货可以撤回吗(淘宝点错了确认收货怎么解决)

    淘宝点错了确认收货可以撤回吗(淘宝点错了确认收货怎么解决)

  • 手机铃声不响了只会震动(苹果手机铃声不响了)

    手机铃声不响了只会震动(苹果手机铃声不响了)

  • macosmojave要不要升级

    macosmojave要不要升级

  • 苹果手机微信信息延迟收到怎么解决(苹果手机微信信号接收慢原因)

    苹果手机微信信息延迟收到怎么解决(苹果手机微信信号接收慢原因)

  • iphone验证app没反应(为啥苹果验证应用没反应)

    iphone验证app没反应(为啥苹果验证应用没反应)

  • led灯驱动器坏了如何修(led灯驱动器坏了灯还会亮吗)

    led灯驱动器坏了如何修(led灯驱动器坏了灯还会亮吗)

  • 2.0音响和2.1音响的区别(2.0音响和2.1音响 影视)

    2.0音响和2.1音响的区别(2.0音响和2.1音响 影视)

  • 大陆的卡在香港能用吗(大陆的卡在香港没法转钱到大陆的卡吗)

    大陆的卡在香港能用吗(大陆的卡在香港没法转钱到大陆的卡吗)

  • 安全提示问题忘了怎么办(安全提示问题忘记了 邮件也解锁不了apple id)

    安全提示问题忘了怎么办(安全提示问题忘记了 邮件也解锁不了apple id)

  • 小米f1国内能用吗(小米f1为什么不在国内卖)

    小米f1国内能用吗(小米f1为什么不在国内卖)

  • 苹果x有线耳机怎么用(苹果x有线耳机怎么连接)

    苹果x有线耳机怎么用(苹果x有线耳机怎么连接)

  • Realme是什么牌子(realme是什么牌子的手机)

    Realme是什么牌子(realme是什么牌子的手机)

  • 如何在word中建立目录(如何在word中建立坐标系)

    如何在word中建立目录(如何在word中建立坐标系)

  • 华为mate20怎么打开开发者选项(华为mate20怎么打开u盘)

    华为mate20怎么打开开发者选项(华为mate20怎么打开u盘)

  • 8gb+128gb是什么意思(8gb+128gb是多少)

    8gb+128gb是什么意思(8gb+128gb是多少)

  • oppor17怎样连接电脑(oppor17怎样连接打印机)

    oppor17怎样连接电脑(oppor17怎样连接打印机)

  • 苹果手机学生模式在哪里(苹果手机学生模式怎么破解)

    苹果手机学生模式在哪里(苹果手机学生模式怎么破解)

  • oppor17有红外线功能吗(oppor17有红外线感应吗)

    oppor17有红外线功能吗(oppor17有红外线感应吗)

  • 华为p30给苹果充电(华为p30给苹果充电设置方法)

    华为p30给苹果充电(华为p30给苹果充电设置方法)

  • bixby键自定义(更改bixby功能键)

    bixby键自定义(更改bixby功能键)

  • 美国人容易用错的英语短语(上)(美国人用什么英语词典)

    美国人容易用错的英语短语(上)(美国人用什么英语词典)

  • 如何查询个人所有贷款记录
  • 私车公用如何处理
  • 工会建账选择哪个科目好
  • 其他业务收入在借方表示什么
  • 预缴增值税如何计提
  • 个体工商户税收怎么算
  • 创投资本投入资金如何做账?
  • 什么叫外埠存款
  • 通行费抵扣入账会计分录?
  • 报废资产处置收入怎么计税
  • 发票购方税号是什么意思
  • 不同的征税主体对同一纳税人
  • 业务招待费可以结转下年抵扣吗
  • 出售固定资产未收款账务处理
  • 发票不验旧可以领取新的吗
  • 公司买的固定资产还没使用
  • 租赁的厂房改造可以费用化吗
  • 增值税和消费税的异同点
  • 拆迁补偿款需要交企业所得税吗
  • win11 老机器
  • 事业单位项目前景怎么样
  • 发票备注栏的填写规定
  • 自产原材料
  • 成本转入费用
  • 什么是票据权利?票据权利的内容有哪些
  • win10开机强制进入修复模式
  • 企业合并分立
  • 土地增值税属于财产税吗
  • 腾达路由器桥接的方法
  • 应付职工薪酬的含义
  • thinkphp域名路由
  • vue全局引入js文件
  • webpack配置publicpath
  • 自动驾驶车祸
  • 水电费是收据能入账不
  • 发票验证不过去会怎么样
  • 其他应收款如何计提减值准备
  • 织梦模板转讯睿模板
  • percona-toolkit对MySQL的复制和监控类操作教程
  • 所得税报表的营业成本包括费用吗
  • 个税手续费返还计入哪个科目
  • 小企业会计准则2023电子版
  • 电算化会计档案论文答辩自述稿
  • 加班餐费和误餐费的区别
  • 工程施工人工费,材料费,机械费占多少比例
  • 投资收益影响营业额吗
  • 基建罚款支出计算方法
  • 现金折扣不考虑增值税
  • 2、开办费用计入哪个账户?
  • 租赁设备如何做会计分录
  • 暂估成本结转后需要冲回吗
  • 什么是应收账款保理
  • 合资公司政策
  • 增值税其他免税销售额
  • 增值税购进扣税法
  • 固定资产暂估入账的税务处理
  • c 语言 mysql
  • centos 安装
  • win7系统打开程序卡住几秒怎么办
  • xp文件夹选项在哪里打开
  • Windows系统通过注册表实现打开CMD并定位到指定文件夹
  • MAC修改Dock烟雾效果及设置抓屏快捷键的方法
  • dell power manager是什么
  • linux文件批处理命令
  • 如何删掉win7系统
  • Android笔记本
  • unity f
  • node js教程
  • 九宫寓意和象征
  • Unity3D: StartCoroutine 和 yield return 深入研究
  • 编写shell脚本,实现备份文件:每天18:00归档
  • 在linux的主要组成部分中最基础的是哪一项?
  • javascriptz
  • node的express
  • python中删除语句
  • JavaScript中的this指向
  • javascript教程完整版
  • android遇到的难题,怎么解决的
  • 云南税务总局官网
  • 企业所得税涉税申报情况进行核查
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设