位置: 编程技术 - 正文

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

  • 宁波财税网会计招聘
  • 外贸企业指的是什么
  • 以前年度损益科目核算业务
  • 一般纳税人资格证书是什么样的
  • 形式发票怎么写
  • 销售补差怎么做分析
  • 兼职业务拿提成合法吗
  • 收入转本年利润的会计分录
  • 个人账户转公司账户需要交税吗
  • 买材料的仓储费会计分录
  • 没有资质的建筑公司怎样接工程
  • 个人与个人之间转账有限额吗
  • 劳务派遣差额征税税率是多少
  • 国有企业出租房屋管理规定
  • 购买护肤品取得的发票能入账吗?
  • 服务的进项税
  • 个税申报状态失败
  • 预付卡销售加油充值款可以报销吗
  • 收到支票怎么处理
  • 专票可以当普票用不抵扣吗
  • 劳务报酬所得缴多少税
  • 旅行社差额征税如何开票
  • 小规模零申报资产负债表报错了要交印花税吗
  • 收到进项发票抵扣联怎么做分录
  • win11怎么关闭系统自动更新
  • 开办费摊销从什么时候开始
  • 对公收到别人的转账怎么记账
  • mac桌面的文件夹怎么换到别的地方
  • 写一段简单的自我介绍
  • 百度有钱花借钱会上征信吗
  • 病毒dll文件
  • 出差回来报销会务费
  • 免税货物增值税计算公式
  • echartx轴刻度设置
  • 民营企业的工业项目建设-经营-转让是什么模式
  • php获取浏览器ua
  • 注意力机制有什么作用
  • JavaScript(WebAPI)+具体案例
  • spring的aoc和aop
  • tf-idf计算
  • 企业账户有什么好处
  • 先款还是先票
  • 企业销售旧车如何开票
  • 债权资产包括哪些会计科目
  • 公司记账可以不开发票吗
  • 帝国cms8.0
  • 帝国cms移动端
  • 富文本word
  • 什么是国家限制企业或行业
  • 税务发票金额可以增加吗?
  • 工资发多了可以追回吗
  • 房地产契税新政策2023
  • 以前年度多记成本费用税前扣除,今年要怎么做分录冲销
  • 工厂厨房厨具
  • 购买公司分录怎么写
  • 包工包料成本比例
  • 企业应该设置的账薄
  • win10自带邮件怎么登录foxmail账号
  • fedoral
  • windows内核版本9600
  • windowsxp收藏夹在哪
  • macos vmware
  • win8网络连接受限怎么处理
  • win10闹钟软件
  • windows8.1仿win7
  • yarn和npm一起使用冲突
  • 在生成目录之前必须对相关文字设置样式
  • angular jsx
  • nodejs爬取数据
  • 安卓手机更新时间
  • socketio视频教程
  • unityc#脚本
  • 发票上的税务号
  • 广西增值税发票查询平台
  • 中国一年的税收是多少万亿
  • 粮食企业所得税优惠
  • 小规模纳税人可以开增值税专用发票吗
  • 小规模纳税人购买车辆可以抵扣税吗
  • 重庆电子税务局官网登录入口
  • 如何查询有没有交医保费用
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设