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

  • 微博推广,会提高了我们的品牌价值!(微博推广,会提升流量吗)

    微博推广,会提高了我们的品牌价值!(微博推广,会提升流量吗)

  • 电脑上腾讯视频怎么旋转90度(电脑上腾讯视频怎么下载到u盘)

    电脑上腾讯视频怎么旋转90度(电脑上腾讯视频怎么下载到u盘)

  • 手机视频看不到对方是怎么回事(手机视频看不到自己的头像怎么办)

    手机视频看不到对方是怎么回事(手机视频看不到自己的头像怎么办)

  • 淘宝付定金后不想要怎么办(淘宝付定金不想要了可以退吗)

    淘宝付定金后不想要怎么办(淘宝付定金不想要了可以退吗)

  • 微信红包为什么会被限制(微信红包为什么可以发520)

    微信红包为什么会被限制(微信红包为什么可以发520)

  • 充电宝掉水里还能用吗(充电宝掉水里还有救吗)

    充电宝掉水里还能用吗(充电宝掉水里还有救吗)

  • 笔记本更新系统要多久(笔记本更新系统后没有wifi了)

    笔记本更新系统要多久(笔记本更新系统后没有wifi了)

  • 怎么优先显示电脑在线(怎么设置优先)

    怎么优先显示电脑在线(怎么设置优先)

  • ipad带笔的是哪款(ipad带笔的是哪款便宜的)

    ipad带笔的是哪款(ipad带笔的是哪款便宜的)

  • 什么是A站(什么是A站B站C站D站P站N站)

    什么是A站(什么是A站B站C站D站P站N站)

  • 微信投票多选能选几个(微信投票怎么可以多投几票)

    微信投票多选能选几个(微信投票怎么可以多投几票)

  • 快手怎样不让别人下载自己的视频(快手怎样不让别人看到我的关注)

    快手怎样不让别人下载自己的视频(快手怎样不让别人看到我的关注)

  • 手机QQ里怎么录屏啊(手机qq怎么录制)

    手机QQ里怎么录屏啊(手机qq怎么录制)

  • vivox30电池能用几个小时(vivox30电池寿命)

    vivox30电池能用几个小时(vivox30电池寿命)

  • 淘宝红包省钱卡可以叠加使用吗(淘宝红包省钱卡怎么关闭)

    淘宝红包省钱卡可以叠加使用吗(淘宝红包省钱卡怎么关闭)

  • ipad突然关机就开不起来了怎么办(ipad突然关机就开不了充电黑屏了)

    ipad突然关机就开不起来了怎么办(ipad突然关机就开不了充电黑屏了)

  • 任务管理器一般可用于(任务管理器一般可用于干什么)

    任务管理器一般可用于(任务管理器一般可用于干什么)

  • ig软件的全称是什么(ig软件的全称是什么意思)

    ig软件的全称是什么(ig软件的全称是什么意思)

  • 网吧可以插u盘吗(网吧可以插u盘玩游戏吗)

    网吧可以插u盘吗(网吧可以插u盘玩游戏吗)

  • ps怎么调整照片颜色(ps怎么调整照片像素大小)

    ps怎么调整照片颜色(ps怎么调整照片像素大小)

  • 如何把qq录音发到微信(qq录音如何发送给qq好友)

    如何把qq录音发到微信(qq录音如何发送给qq好友)

  • 淘宝预售订单怎么加购物车(淘宝预售订单怎么备注)

    淘宝预售订单怎么加购物车(淘宝预售订单怎么备注)

  • ppt全是图片怎么排版(ppt里的图片)

    ppt全是图片怎么排版(ppt里的图片)

  • qq会员能退款吗(qq会员能退订吗)

    qq会员能退款吗(qq会员能退订吗)

  • 小米9dc调光怎么开启(小米cc9 dc调光)

    小米9dc调光怎么开启(小米cc9 dc调光)

  • mac下的dns怎么设置更改?mac修改dns方法介绍(mac dns 设置)

    mac下的dns怎么设置更改?mac修改dns方法介绍(mac dns 设置)

  • 微软Win11乱改?这才是Win11右键菜单最完美解决方法!(win11修改版)

    微软Win11乱改?这才是Win11右键菜单最完美解决方法!(win11修改版)

  • 海康工业相机 C# 开发示例(海康工业相机彩色改黑白设置)

    海康工业相机 C# 开发示例(海康工业相机彩色改黑白设置)

  • cnpm安装步骤(cnpm安装成功为什么用不了)

    cnpm安装步骤(cnpm安装成功为什么用不了)

  • 企业所得税汇算清缴补缴税款分录
  • 福建税务网上办税流程
  • 消费税为什么是减
  • 公司替个人交的水电费计入哪里了
  • 企业卖车需要交印花税吗
  • 简单的记账方法明细表格怎么做
  • 直接收到货款也要走应收账款吗
  • 物业公司收款一般多久
  • 公司支付保险公司保费怎么做账
  • 自制原始凭证和原始凭证的区别
  • 审计人员的差旅费放在哪核算
  • 出口退税对企业利润的影响
  • 煤炭企业税收政策
  • 关于商业健康保险产品的规范和条件
  • 当月进项已认证,发现票有问题怎么处理
  • 保险代理人佣金的规定
  • 财务费用中的利息收入指什么
  • 房地产企业人防工程计入什么科目
  • deepin阻止关机
  • 残疾人保障金汇算清缴填在哪里
  • win11更新补丁如何删除
  • 小规模纳税人的企业所得税税率
  • 固定资产折旧表述不正确的是
  • pnaico.exe是什么软件
  • 很有意思的一段话
  • 新公司30天内未办理税务登记
  • vue 首页
  • 低值易耗品摊销方法名称怎么选
  • php获取并显示用户的用户名
  • yew 框架
  • 梅萨维德国家公园特点
  • 著作权费用
  • python项目开发案例集锦pdf百度网盘
  • 预付卡发票能否抵扣
  • 养殖类合作社
  • 应收预收应付预付科目怎么合并
  • 国有股权无偿划转是什么意思
  • 以房抵债涉税分析
  • 发票 认证抵扣
  • 现金流量表中应收账款为负是什么意思
  • 计提福利费是什么意思
  • 开具的简易计税凭证
  • 衍生工具的作用是什么
  • 停车费报账
  • 企业对外借款是什么意思
  • 个人承包工程如何缴纳税款
  • 购买汽车时的保险是什么
  • 付款与开票单位不一致怎样做账
  • 生产成本比主营业务成本大
  • 期末结账账务处理
  • sql存储过程实例有哪些
  • mysql 5.7.24安装
  • win7激活怎么关闭
  • linux系统密码设置
  • watch programmes
  • 开机一直提醒ctrl+alt+del
  • ac1st19.dll
  • win10无法安装软件怎么解决
  • win7第三方更新
  • windows8开机蓝屏
  • linux 操作系统
  • 微软官方解决升级问题
  • pdoors.exe
  • win7系统怎么禁用win键
  • win7保存桌面不见了怎么办
  • win7如何设置网络连接路由器
  • win8系统修复在哪里
  • node运行js文件
  • 安卓十游戏怎么玩
  • js 对象内存 占用
  • javascript例题
  • js实现盒子移动
  • python最简单
  • 深入浅析是什么意思
  • js跨域解决方案
  • python html转markdown
  • 2021税务公告
  • 个体户注销还要交税吗?
  • 中国税务局官网发票查询系统
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设