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

  • 增值税普通发票和电子普通发票的区别
  • 展会补贴收入会计处理
  • 新成立的公司残保金如何申报
  • 普通发票申请表怎么填写
  • 房地产企业拆迁安置土地增值税清算疑点
  • 异地工程预缴税有哪些流程
  • 公司属于亏损状态,但是法人个人收入算公司账吗
  • 神州优车开具的客运服务费入什么科目?
  • 2014年税收征管体制改革
  • 跨年发票企业所得税
  • 销售原材料的账务处理
  • 出差票据应该如何记账
  • 保安服务费可以计入劳务费吗
  • 营改增对小规模的影响
  • 企业收到损坏赔偿金
  • 存货减值准备计提
  • 视同销售收入计入会计利润中吗
  • 个体工商户网上报税流程
  • 营业收入销售收入计算公式
  • 政府补助专项资金账务处理
  • 什么是短期借款利率
  • 棚户区改造贷款管理办法
  • 调整会计分录是什么
  • 政府性基金收入来源
  • 存货报废会计分录例题
  • Win11 Build 22000.348更新补丁KB5007262预览版发布(附更新修复内容汇总)
  • PHP:pcntl_signal()的用法_PCNTL函数
  • 填制的凭证内容有哪些
  • laravel常用命令
  • ie浏览器网页滚动条怎么隐藏
  • unity ik
  • ps黑白怎么调
  • 应收账款的
  • 招待费超出部分的分录
  • django中httpresponse
  • 工会经费计提比例是2%还是0.8%
  • 科目汇总表一页不够写怎么办
  • vue3父子组件通信
  • 未开票收入缴纳增值税做账
  • 最好用的刷题笔
  • 四种股利分配政策及适用情况
  • 工业企业成本一般占收入的比例
  • 合并财务报表为什么要抵消子公司所有者权益
  • 低值易耗品如何摊销
  • 一般情况下银行加权平均成本的变化主要取决于什么因素
  • 某个项目投资多少钱怎么算
  • 列举2-4种特殊销售方式,其销售额如何确认?
  • 增值税销项抵扣报税后有效期是多长时间
  • centos6.2安装
  • mysql大小
  • sql行列转换方式
  • macbook pro怎么分区
  • win10怎么去掉
  • 快速查看浏览的英语短语
  • xp局域网文件共享设置
  • win8怎么启动资源管理器
  • linux编译安装php扩展
  • win7开机无法连接所有网络驱动器
  • 怎么用windows
  • linux中shell脚本编写
  • ftp下载怎么用
  • 深入浅出javascript
  • js 构建树
  • android自学
  • JavaScript中定义数组
  • settimeout和setinterval在安卓机无效
  • 张孝祥西江月
  • Android IntentFilter 匹配原则浅析
  • python 在线运行环境
  • JQuery解析XML数据的几个简单实例
  • recyclerview瀑布流效果
  • 新中国税务历史
  • 电子税务局怎么添加银行账户信息
  • 小规模和一般纳税人的划分标准
  • 天津电子税务局官网登录入口网页版
  • 契税含不含精装修
  • 企业内部清欠的措施和做法
  • 外贸高新技术企业认定
  • 发票多久作废不了
  • 税务内控机制建设
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设