位置: 编程技术 - 正文

解决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例子)

  • 工程预付款的支付要求
  • 济南非税是什么意思
  • 企业工商年报填写须知
  • 公对私转账没有到账怎么查询
  • 平均分摊法计算公式
  • 所得税费用和应交税费的关系
  • 退回多打货款分录
  • 销售沙石可以简易计征吗
  • 给个人的返利如何交税
  • 滞留发票产生的原因主要包括哪些?
  • 金三系统客户端插件在哪下载以及安装流程是怎样的?
  • 销售软件产品
  • 产值指的是财务报表哪个数值
  • 工商营业年报怎么做
  • 用友t3怎么增加现金流量项目
  • 土地增值税进项税
  • 代发保险款收入
  • 小规模纳税人开专票不超过30万要交税吗
  • 其他应收款押金计提坏账吗
  • 在windows 10中
  • 如何开启windows10云服务
  • 退付手续费怎么操作
  • 所有者权益变动表范本
  • 公允价值变动损益借贷方向增减
  • 税盘进项税额怎么做
  • gws.exe是啥
  • 天竺葵的养殖方法和繁殖方法
  • php vld
  • 公司购买股票的流程
  • 经营租赁固定资产体现实质重于形式
  • linux系统设置屏幕常亮
  • layui 日期控件赋值
  • 伦索伊斯马拉赫塞斯国家公园
  • php验证码识别
  • 房屋所在地的房子怎么查
  • 训练自己的GPT模型 中文改英文
  • 长期待摊费用的摊销年限有规定吗?
  • 预算会计组成体系不包括
  • php函数的定义和调用
  • 企业的存货采用计划成本核算的,在资产负债表日
  • for of 与for in
  • 开多少票就要进多少钱吗
  • 商品和服务税收分类编码表下载
  • 计算机中的意思和含义
  • PYTHON中使用什么符号表示单行注释
  • 让渡资产使用权收入计入什么科目
  • 年底进项税额比年初多
  • 建安类企业包括哪些公司
  • 怎么导出银行去银行流水
  • mysql监控sql性能
  • 运费与快递费的区别在哪
  • mysql改造
  • 做账是指做什么
  • 建造合同信息表
  • 保险公司披露的上一年度保险责任准备金
  • 现金流量少
  • 美元利息结汇时结汇项目是什么
  • 商品销售方式
  • 胶水属于什么开发工具
  • 为什么规定视同销售?
  • 汽车4s店有哪些功能
  • 繁体软件在简体运行
  • centos vncviewer
  • mac电脑finder在哪里
  • win8系统如何卸载软件
  • win7系统打开我的电脑一闪
  • win7系统无法创建分区也无法定位
  • windows 10预览版
  • 场景切换方式
  • Node.js中的事件循环是什么意思
  • 简单的jquery插件实例
  • 原生js实现promise
  • node js 前端
  • JavaScript File API文件上传预览
  • jquery设置禁用
  • mongodb python
  • easyui toolbar布局
  • jquery创建map集合
  • 江苏税务局开票在哪看的
  • 太原市税务局电话
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设