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

  • 诺基亚625性能(诺基亚625怎么样)(诺基亚6265i)

    诺基亚625性能(诺基亚625怎么样)(诺基亚6265i)

  • 沃阅读怎么退订(退订沃阅读能退款吗)

    沃阅读怎么退订(退订沃阅读能退款吗)

  • word怎么让字斜45(word怎么把字斜45度)

    word怎么让字斜45(word怎么把字斜45度)

  • 视频帧数怎么调节(视频怎么调画质)

    视频帧数怎么调节(视频怎么调画质)

  • 微信私信是什么意思(微信新功能私信)

    微信私信是什么意思(微信新功能私信)

  • 最大预渲染设置1还是4?(最大预渲染帧数是什么意思)

    最大预渲染设置1还是4?(最大预渲染帧数是什么意思)

  • mp3可以用蓝牙耳机吗(mp3可以用蓝牙耳机听手机歌吗)

    mp3可以用蓝牙耳机吗(mp3可以用蓝牙耳机听手机歌吗)

  • teamviewer免费用多久(teamviewer可以免费用多久)

    teamviewer免费用多久(teamviewer可以免费用多久)

  • 华为手机怎么设置三键模式(华为手机怎么设置来电铃声)

    华为手机怎么设置三键模式(华为手机怎么设置来电铃声)

  • 华为手机能投屏到电视上吗(华为手机能投屏到墙上吗)

    华为手机能投屏到电视上吗(华为手机能投屏到墙上吗)

  • 静态查找和动态查找的根本区别(静态查找和动态查找的相同点)

    静态查找和动态查找的根本区别(静态查找和动态查找的相同点)

  • gms有什么用(gms有什么用处)

    gms有什么用(gms有什么用处)

  • 抖音怎么横屏看(抖音怎么横屏看直播间)

    抖音怎么横屏看(抖音怎么横屏看直播间)

  • 苹果笔记本可以加装固态硬盘吗(苹果笔记本可以装win10系统吗)

    苹果笔记本可以加装固态硬盘吗(苹果笔记本可以装win10系统吗)

  • 一个身份证能绑定几个陌陌号(一个身份证能绑两个抖音吗)

    一个身份证能绑定几个陌陌号(一个身份证能绑两个抖音吗)

  • Reno Ace怎么隐藏应用(oppo reno隐藏)

    Reno Ace怎么隐藏应用(oppo reno隐藏)

  • word封面怎么加目录(word封面怎么加到文档里)

    word封面怎么加目录(word封面怎么加到文档里)

  • 相机的光圈大小有什么区别(相机的光圈大小是不是取决于镜头)

    相机的光圈大小有什么区别(相机的光圈大小是不是取决于镜头)

  • 怎么关闭美团闪付(怎么关闭美团闪付服务)

    怎么关闭美团闪付(怎么关闭美团闪付服务)

  • 抖音不能评论了怎么办(抖音不能评论了怎么解除)

    抖音不能评论了怎么办(抖音不能评论了怎么解除)

  • 华为手机可以控制电视吗(华为手机可以控制小米电视吗)

    华为手机可以控制电视吗(华为手机可以控制小米电视吗)

  • qq诞生于哪一年哪一月(qq起始于哪一年)

    qq诞生于哪一年哪一月(qq起始于哪一年)

  • 新版qq影音如何合并音乐(qq影音 使用技巧)

    新版qq影音如何合并音乐(qq影音 使用技巧)

  • 电脑中的五角星打出教程(电脑上的五角星是什么意思)

    电脑中的五角星打出教程(电脑上的五角星是什么意思)

  • 织梦DEDECMS栏目后台设置显示,栏目前台怎么隐藏(织梦cms不更新了吗)

    织梦DEDECMS栏目后台设置显示,栏目前台怎么隐藏(织梦cms不更新了吗)

  • 从租计征房产税低于从价计征房产税
  • 个体户营业税怎么算
  • 工程项目纳税
  • 电力工程服务费计入什么科目
  • 税控盘技术维护费申报时候怎么填报
  • 固定资产后续支出可以计入哪些费用
  • 财政补助结转会计处理
  • 工程预付款是否监管
  • 固定资产盘亏账务处理例题
  • 事业单位专项资金的管理要求
  • 收到员工的罚款钱怎么写分录
  • 服装公司业务范围有哪些
  • 合法票据的利息计算方法
  • 车辆一次性入费用会计分录
  • 企业拆迁补偿款要交哪些税
  • 从农民手中购买农产品税率
  • 关于两套账老板和会计须知的4个点
  • 用于当年免征的增值税
  • 赊购商品一批
  • 注册资金印花税什么时候开始交
  • 活动策划费开票在哪个项目下面
  • 个体户小规模纳税人每月开票
  • 没有走公户的发票费用怎么做账
  • 财政拨款收入的预算会计科目
  • 固定资产的认定类别
  • 职业病治疗费用由谁来承担
  • 股权转让协议的注意事项
  • 担保公司计提的费用
  • 境外所得抵扣税怎么申报
  • 怎样改善现金流量比率
  • 工业企业在进行材料采购
  • adamax优化器
  • uni-app开发教程
  • 筹建期间的开办费为什么不属于资产
  • 多目标pso
  • 税前扣除项目什么意思
  • 小规模纳税人税额怎么算
  • 未分配利润是负数是亏损吗
  • 如何减税降税
  • 免费学电脑网站
  • 账实不符的后果和对策
  • 企业交房租没有发票能充费用吗
  • 三代手续费操作流程
  • 通行费发票如何勾选
  • 增值税加计扣除最新政策2023
  • 购置环保设备一次性扣除
  • 工程物资残料价值
  • 话费报销属于什么费用
  • 餐饮业可以开具免税发票吗
  • 递延收益的影响
  • 12月费用1月报销的账务处理
  • 停车费怎么入账会计分录
  • 用Autoconf检测MySQL软件包的教程
  • sql语句优化总结
  • mysql联合索引生效原则
  • 挖掘出潜能
  • 搭建技巧和方法示意图
  • realshed.exe - realshed是什么进程 有什么用
  • win8.1的开始菜单在哪
  • 防止 避免
  • win7无法打开windows功能
  • win10添加功能在哪
  • win10一堆毛病
  • 用360可以装win7系统吗
  • window10自动维护功能有什么用
  • win10 ug
  • 详解IWinter 一个路由转控制器的 Nodejs 库
  • perl ne
  • shell脚本函数及传参
  • 用python写多线性模型
  • python3并发
  • 简要说明javascript的作用
  • ECLIPSE编辑器
  • rpg好玩地图
  • js如何保留一位小数
  • 全国残疾人工作先进个人
  • 2022年最新最全执业药师继续教育考试答案
  • 电子税务局申领的发票怎么读入
  • 入职培训结束就签合同吗
  • 河南省税务局系统最新消息
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设