位置: 编程技术 - 正文

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

  • 发票认证是干嘛
  • 环保科技属于什么行业类别
  • 企业合并股份比例
  • 固定资产不能抵扣进项税额
  • 肉联厂销售模式
  • 贩卖增值税发票怎么判刑
  • 营业执照三证合一是哪一年开始的
  • 建安企业企业所得税核定
  • 公司对项目管理方式
  • 未开票确认收入分录怎么做
  • 诉讼费走哪个会计科目
  • 调价单生成什么科目
  • 境外增值税代扣代缴
  • 契税与印花税能抵扣吗
  • 出口退税的办理影响出口吗
  • 个人所得税申报错误如何更正申报
  • 办税员实名认证变更
  • 独生子女补贴是给父母还是子女的
  • 广告公司需要交消费税吗
  • 购买债券投资的交易费用
  • 营改增政策解读
  • 小规模纳税人补开发票如何申报增值税
  • 同一控制下企业合并权益抵消
  • 出口转内销的销项税怎么计算
  • windows11 怎么更新
  • 房地产销售代理是什么意思
  • 公司买手机怎么做账务处理
  • 公会经费缴费单位应于每月
  • 职称评审费计入什么科目
  • kaggle官网注册
  • php怎么上传图片
  • 企业在建工程领用自产的应税消费品
  • 签了购房合同贷款办不下来怎么办
  • vue的自定义指令怎么用
  • kafka图形化界面
  • php锁定文本
  • CodeIgniter针对数据库的连接、配置及使用方法
  • thinkphp连接数据库优化
  • 市盈率和市净率多少比较合适
  • php function函数的用法
  • 提取现金准备发放工资
  • 财务报表没有申报会影响领发票吗
  • 业务招待费的报销额度是多少
  • 劳务费发票 个税
  • 社保基数怎么申请下调
  • 安装使用漏电保护器是属于哪种安全措施
  • 销售鸡蛋免税怎么交税
  • 应付账款尾差如何处理
  • 怎么结转未交增值税
  • 企业利润表表怎么看
  • 贷款担保费应计入什么
  • 个人名义开工程发票税率是多少
  • 职工社会保险费是什么意思
  • 为取得固定资产而发生的什么支出可计入固定资产成本
  • 工会经费网上怎么申报
  • 企业所得税缴纳模式
  • 未使用和未投入使用
  • 应付账款和预付账款都属于负债类科目
  • 税控盘开具发票怎么冲红?
  • 进项做成了销项怎么调账
  • mysql两种安装方式
  • mysql导入导出sql文件
  • innodb_trx表
  • solaris 安装
  • mac怎么创建apple id
  • xp系统删除用户账户怎么没有删除键
  • ubuntu发行版介绍
  • hp是什么代码
  • 如何设置虚拟内存大小
  • 常用批处理命令大全
  • js数组菜鸟教程
  • bgm背景
  • logcatapp
  • 安装了python2.7和3.6怎么切换版本
  • 安卓系统手机图片文件夹在哪里
  • android root 原理
  • 单位没有缴纳个人医保
  • 税控发票开票系统对电脑配置有要求吗?
  • 国家税务总局34号
  • 免抵税额在增值税申报表附表
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设