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

  • vivo锁屏指纹图标怎么换(vivo锁屏指纹图标样式)

    vivo锁屏指纹图标怎么换(vivo锁屏指纹图标样式)

  • 微信自动回复在哪里(微信自动回复在哪里关闭)

    微信自动回复在哪里(微信自动回复在哪里关闭)

  • 苹果不在充电什么意思(苹果不在充电什么情况)

    苹果不在充电什么意思(苹果不在充电什么情况)

  • 小米全面屏手势是从miui几开始的(小米全面屏手势震动关闭)

    小米全面屏手势是从miui几开始的(小米全面屏手势震动关闭)

  • csv和excel的区别(csv和xlsx哪个读取快)

    csv和excel的区别(csv和xlsx哪个读取快)

  • 苹果官网可以催促加急发货吗(苹果官网可以催促加急退款吗)

    苹果官网可以催促加急发货吗(苹果官网可以催促加急退款吗)

  • 9d钢化膜和普通的有什么区别(9d钢化膜好不好)

    9d钢化膜和普通的有什么区别(9d钢化膜好不好)

  • 电脑键盘fn键是干嘛的(电脑键盘fn键是关闭怎么调颜色的)

    电脑键盘fn键是干嘛的(电脑键盘fn键是关闭怎么调颜色的)

  • k620显卡相当于gtx什么(k620显卡相当于哪个级别核显)

    k620显卡相当于gtx什么(k620显卡相当于哪个级别核显)

  • 表格有些线没了怎么办(电子表格有的线不见了)

    表格有些线没了怎么办(电子表格有的线不见了)

  • 国屏与原屏的区别(国屏与原屏的区别是什么)

    国屏与原屏的区别(国屏与原屏的区别是什么)

  • 怎么把word保存在桌面上(怎么把word保存到桌面)

    怎么把word保存在桌面上(怎么把word保存到桌面)

  • a2133是什么型号(a2133是什么型号无限开机紫屏)

    a2133是什么型号(a2133是什么型号无限开机紫屏)

  • 打字震动怎么关(打字震动怎么关vivo)

    打字震动怎么关(打字震动怎么关vivo)

  • vivo三个按键设置方法(vivo三个按键在哪设置)

    vivo三个按键设置方法(vivo三个按键在哪设置)

  • ios13的快捷指令在哪(ios13快捷指令运行前询问怎么关闭)

    ios13的快捷指令在哪(ios13快捷指令运行前询问怎么关闭)

  • 兼容性是什么意思(兼容性是什么意思如何处理?)

    兼容性是什么意思(兼容性是什么意思如何处理?)

  • 拼多多可以挂抖音吗(拼多多可以挂抖音链接吗)

    拼多多可以挂抖音吗(拼多多可以挂抖音链接吗)

  • 小米8青春版快充设置(小米8青春版快速充电)

    小米8青春版快充设置(小米8青春版快速充电)

  • 铃声多多怎么下载到sd卡(铃声多多怎么下载到u盘)

    铃声多多怎么下载到sd卡(铃声多多怎么下载到u盘)

  • 闲鱼删除订单评价还在吗(闲鱼删除订单评论还在吗)

    闲鱼删除订单评价还在吗(闲鱼删除订单评论还在吗)

  • oppor17时间怎么显示在桌面(oppor17时间怎么加粗)

    oppor17时间怎么显示在桌面(oppor17时间怎么加粗)

  • 什么是bashMAC OS手动升级Bash的方法(什么是suv汽车)

    什么是bashMAC OS手动升级Bash的方法(什么是suv汽车)

  • python缩进和空格的好处(python缩进有什么作用)

    python缩进和空格的好处(python缩进有什么作用)

  • 消费税是什么意思大白话
  • 税务筹划的基本前提是
  • 公司能经营烟草公司吗
  • 公司无偿更换产品账务如何处理
  • 成本类科目有哪些口诀
  • 装饰公司开票内容怎么填
  • 中外合资经营企业法
  • 资金不需要验资,实收资本怎么入账
  • 银行取现怎么取
  • 营改增后如何纳税
  • 传媒公司的成本构成有哪些
  • 年薪制有什么好处
  • 安装工程中安装工程与市政路灯工程界定不正确的是
  • 意外保险计入职工薪酬
  • 税务小规模定律是什么意思
  • 饭店试菜费用如何计算
  • 绿化费用明细
  • 拿到省级奖有什么用
  • 小微企业增值税最新优惠政策
  • 财务软件利润表没显示
  • 海关新增成交方式exw条款,如何退税?
  • 讨论:利息与贴息的关系?
  • 申报专利 费用
  • 税款申报成功但没有缴款怎么办
  • windows11怎么设置默认应用
  • 鸿蒙系统支持第三方相机吗
  • 专柜公司货什么意思
  • mt-mon.exe
  • 如何提高php性能
  • 金融企业贷款损失准备金计提比例
  • 收到提供劳务的收入
  • 公允价值进行会计计量
  • visual studio code怎么创建vue项目
  • php中获取当前时间
  • canvas软件教程
  • before跟after区别
  • 现金溢余和短缺的会计分录
  • 现金流动负债比率和流动比率一样吗
  • 公司少申报个税
  • sql有数据保护功能
  • 初学者应该看什么书
  • 增值税延期滞纳金计算
  • sql随机抽取
  • 长期应收款的主要类型
  • 收到购货款用预付款吗
  • 企业取得土地补偿款
  • 发票已认证次月退回
  • 取现发放劳务费怎么做账
  • 税控系统专用设备包括税控收款机吗
  • 影视公司临时演员怎么办
  • 产品质量问题有赔偿吗
  • 应收账款多出来的钱记到什么科目
  • 预期信用损失影响损益吗
  • 预付购买设备款
  • 会计凭证的审核的注意事项有哪些
  • 商业承兑汇票是什么
  • solaris 查看进程
  • 硬盘分几个区最好
  • win8系统升级到win10东西还在吗
  • u盘制作iso镜像文件启动
  • 在windows中用于显示正在运行的程序名称的栏称为
  • linux系统中网络配置文件一般放在
  • centos7搜索
  • members-area.exe是什么进程 members-area进程查询
  • onionwormimmune.exe是什么
  • win8 64位触控版导致笔记本键盘失灵解决方法
  • win10的outlook在哪
  • Unity3D Editor类(Inspector) 编写经验总结
  • canvas动态绘制简单gif
  • Cocos2dx3.2 Crazy Tetris 制作简单的凸多边形刚体
  • 自动化测试读写题答案
  • unity mrt
  • jQuery Ajax请求后台数据并在前台接收
  • 在批改中,可以使用x表示错误
  • 安卓apk混淆工具
  • unity mode
  • react和nodejs
  • 天津国税局电子税务局
  • 上海自由贸易区图片
  • 国企划拨用地改制处置
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设