位置: 编程技术 - 正文

解决JavaScript数字精度丢失问题的方法(javascript+)

编辑:rootadmin

推荐整理分享解决JavaScript数字精度丢失问题的方法(javascript+),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:javascript 数据处理,javascript 数值计算,js处理数组的方法,js处理数组的方法,javascript数学,javascript 数字,javascript:;怎么解决,javascript数学,内容如对您有帮助,希望把文章链接给更多的朋友!

本文分为三个部分

JS 数字精度丢失的一些典型问题 JS 数字精度丢失的原因 解决方案(一个对象+一个函数)

一、JS数字精度丢失的一些典型问题

1. 两个简单的浮点数相加

这真不是 Firebug 的问题,可以用alert试试 (哈哈开玩笑)。

看看Java的运算结果

再看看Python

2. 大整数运算

位和位数竟然相等,没天理啊。

又如

看结果

三观又被颠覆了。

3. toFixed 不会四舍五入(Chrome)

解决JavaScript数字精度丢失问题的方法(javascript+)

线上曾经发生过 Chrome 中价格和其它浏览器不一致

二、JS 数字丢失精度的原因

计算机的二进制实现和位数限制有些数无法有限表示。就像一些无理数不能有限表示,如 圆周率 3....,1.... 等。JS 遵循 IEEE 规范,采用双精度存储(double precision),占用 bit。如图

意义

1位用来表示符号位 位用来表示指数 位表示尾数

浮点数,比如

此时只能模仿十进制进行四舍五入了,但是二进制只有 0 和 1 两个,于是变为 0 舍 1 入。这即是计算机中部分浮点数运算时出现误差,丢失精度的根本原因。

大整数的精度丢失和浮点数本质上是一样的,尾数位最大是位,因此 JS 中能精准表示的最大整数是 Math.pow(2, ),十进制即 。

大于 的可能会丢失精度

实际上

结果如图

以上,可以知道看似有穷的数字, 在计算机的二进制表示里却是无穷的,由于存储位数限制因此存在“舍去”,精度丢失就发生了。

三、解决方案

对于整数,前端出现问题的几率可能比较低,毕竟很少有业务需要需要用到超大整数,只要运算结果不超过 Math.pow(2, ) 就不会丢失精度。

对于小数,前端出现问题的几率还是很多的,尤其在一些电商网站涉及到金额等数据。解决方式:把小数放到位整数(乘倍数),再缩小回原来倍数(除倍数)

以下是我写了一个对象,对小数的加减乘除运算丢失精度做了屏蔽。当然转换后的整数依然不能超过 。

toFixed的修复如下

标签: javascript+

本文链接地址:https://www.jiuchutong.com/biancheng/387083.html 转载请保留说明!

上一篇:Javascript实现检测客户端类型代码封包(javascript test)

下一篇:谈谈基于iframe、FormData、FileReader三种无刷新上传文件的方法(iframe例子)

  • 报税日期是哪月哪天?
  • 微信企业版支付
  • 对外捐赠固定资产属于营业外支出吗
  • 小规模纳税人不动产租赁税率
  • 企业所得税不预缴年终汇算可以吗
  • 每月先报税还是先清卡
  • 企业资产核算不包括哪些
  • 建筑业异地预缴增值税流程
  • 申报扣除的广告费支出须符合哪些条件
  • 别墅一般送车库吗
  • 建筑挂靠企业账务处理
  • 企业间借款利息怎么算
  • 不开发票的收入如何申报纳税
  • 自然人能申请破产吗?
  • 农场管委会是什么性质单位
  • 需不需要交企业所得税看报表的哪个地方?
  • 废旧物资增值税税收优惠政策
  • 何为销项税额
  • 非居民企业取得股息红利企业所得税
  • 减税必须通过开户银行吗
  • 自然人股东转让股权如何避税
  • 消耗性生物资产与生产性生物资产的区别
  • 去年的成本今年入账会计分录
  • 两个公司发工资违法吗
  • 结转法定盈余公积会计分录怎么写
  • 往来账乱如何处理
  • 贷款计入哪个会计科目
  • 苹果最强机型
  • linux怎么下载安装腾讯Tim?
  • win10一键释放内存
  • PHP:pg_query()的用法_PostgreSQL函数
  • 公益性捐赠支出的标准
  • php deprecated
  • 语音模块作用
  • 以非现金资产清偿债务的,债权人应当
  • 企业之间是什么意思
  • 金税三期登录不上
  • php如何继承多个类
  • 小程序设计制作
  • php 编码
  • 帝国cms如何使用
  • 固定资产内部转移单
  • 税款已缴纳后发票怎么查
  • 发票货物或应税劳务名称怎么填写
  • sql2008安装出现以下错误
  • MySQL5.1忘记root密码的解决办法(亲测)
  • 交通费 抵扣
  • 应收账款和应付账款可以对冲吗
  • 一般纳税人的商业保险可以开票吗
  • 进口环节缴纳关税计入什么科目
  • 专票时限是多长时间的
  • 研发费用不一致说明
  • 递延资产放在资产负债表哪里
  • 可以先抵扣下个月工资吗
  • 公司进项不够可以退税吗
  • 所有者权益的概念和特征
  • 待清算商户消费款项是什么
  • 公司买护肤品发票如何入账
  • 对外投资信息忘记填了
  • 作废发票丢失怎么补办
  • sqlserver数据类型real
  • 用友t6运行特别慢
  • 苹果电脑邮箱添加163邮箱
  • Win7/Win8/Win10单、多系统一键安装教程 只需30秒!
  • directx出现错误
  • 如何查看win7激活码能重复使用
  • linux rpm包安装
  • mac菜单栏不见了
  • unity3d界面布局
  • express model
  • bootstrap下拉框设置默认值
  • linux中shell脚本编写
  • 爬虫 python
  • cocos2d::Vector
  • 使用jquery
  • javascript语言基础
  • 置顶快手作品怎么弄
  • 宝鸡税务局长
  • 爱山东怎样查询医保余额
  • 财税专家刘杨简历
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设