做项目的时候,发现多个小数相加值明明是100,但js 函数计算后确实99.9999,无限循环小数。恰好在前端大全的公众号上看到了一篇文章解释了这个问题,如下图:

文章链接:https://mp.weixin.qq.com/s/I6uOfr9ybx3-Q4nwdWJvTw

大致意思是:在JS内部所有的计算都是以二进制方式计算的。 所以运算 0.1+ 0.2 时要先把 0.1和 0.2 从十进制转成二进制,转成二进制后是无穷的,所以在运算中出现了精度丢失问题,导致最后结果不准确。

以下是我根据当前网上两个数相加的版本,改造成多个小数相加后在项目使用的代码示例:

  add: function () {const arr = [0.1, 0.2]const fieldArr = []for (var i = 0; i < arr.length; i++) {var m, field;try {field = arr[i].toString().split('.')[1].length;} catch (e) {field = 0;}fieldArr.push(field)}m = Math.pow(10, Math.max(...fieldArr));let add = 0arr.forEach(function (item) {add = add + item * m})let sum = Math.round(add) / mconsole.log(sum);},

前端js多个小数相加出现无限循环小数的解决办法相关推荐

  1. 前端面试查漏补缺--(三) 跨域及常见解决办法

    前言 本系列最开始是为了自己面试准备的.后来发现整理越来越多,差不多有十二万字符,最后决定还是分享出来给大家. 为了分享整理出来,花费了自己大量的时间,起码是只自己用的三倍时间.如果喜欢的话,欢迎收藏 ...

  2. vue.js 引用背景图 background 无效的3种解决办法

    #vue.js项目中,出现css调用background背景图无效?如何解决? 或者调用<img>标签,也无效果? 直接上代码,自行对比查找一下: 效果图预览 1. 正确的代码,示例如下: ...

  3. win10修改系统配置处理器引导参数后,系统无限蓝屏解决办法

    win10修改系统配置处理器引导参数后,系统无限蓝屏解决办法 0:开机时先按f8进入安全模式,在进入命令提示符 1.进入 启动修复 的 命令提示符(最好是使用有管理员权限的,不过普通用户我也每试过), ...

  4. dell计算机一直重启,戴尔笔记本无限重启具体解决办法

    戴尔笔记本无限重启怎么办?戴尔笔记本虽然性能良好,但若使用时间长了也难免会出现问题,若是戴尔笔记本无限重启该如何解决呢?今天小编要给大家讲解的便是戴尔笔记本无限重启的解决方法,一起来看看吧. 戴尔笔记 ...

  5. 学习笔记_关于switch在whlie中无限循环的解决办法_C语言

    学习笔记_关于switch在whlie中无限循环的解决办法_C语言 今天在做作业的时候突然发现一个问题 #include<stdio.h> int main() {int a;while( ...

  6. vue+three.js加载本地stl模型无法显示的解决办法

    先放代码 <template><div><div id="container"></div></div> </te ...

  7. 装了驱动人生后无限重启的解决办法

    由于楼主在主机插入usb 转串口的线,端口不可用,所以在网上下载了驱动人生,然后就悲剧了.. 打开解压安装就去做别的了,过了几秒Windows提示说电脑遇到问题需要重启,重启后还是要重启无限循环 解决 ...

  8. JS调用浏览器不能全屏适应A4纸解决办法

    引入JQ:<script src="https://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script&g ...

  9. 浏览器控制台无限debugger与解决办法

    什么是无限debugger 某一天,我在用控制台检查network信息时 遇到了很怪的一幕,一旦打开控制台就会自动跳转到debug调试页面 firefox浏览器甚至会迅速奔溃 chrome中可以看到这 ...

最新文章

  1. Android10剪贴板,剪纸堆 Clip Stack - 轻量级剪贴板管理程序(支持 Android 10)
  2. ALV标准范例Demo汇总
  3. android loading封装_我们经常用的Loading动画居然还有这种姿势
  4. 信管家源代码c语言,用队列实现按层次创建二叉树的源代码,最好是C语言
  5. python os模块打开文件_Python 文件操作之OS模块
  6. mysql整段注释_MySQL 添加注释(comment)
  7. java jdk的作用_Java JDK环境配置及配置作用说明
  8. linux 用户管理、权限管理
  9. JavaScript学习笔记——对表单的操作
  10. 3 款非常实用的 Node.js 版本管理工具
  11. 立创eda学习笔记二十九:原理图转PCB
  12. java节假日算法_java处理节假日和工作时间的工具类
  13. Layer.js实现表格溢出内容省略号显示,悬停显示全部
  14. 数论学习四之——威尔逊定理
  15. Android Toast 使用
  16. AT88SC0104C加密芯片的工作原理
  17. word文章目录页码问题
  18. Qt实现的一些小软件
  19. HTC Lengend G6上网-彩信设置
  20. ffprobe获取视频帧信息中的pkt_pts、pkt_pts_time

热门文章

  1. 计算不同高度下的大气密度
  2. MySql如何将远程数据库复制到本地
  3. win10打印机脱机提示无法正常进行打印怎么办
  4. 第六届“NOI与中小学计算机教育”论坛举办通知
  5. HTML的学习总结(一)
  6. 实验吧-密码学-传统知识+古典密码(六十甲子年)
  7. MySQL查询被选修的课程_sql语句查询没有被学生选修过的课程(即课程号没有在sc表中出现过)的名称....
  8. 计算机网络---IP数据报
  9. 实在智能RPA助你提升电商运营效率,快速起爆店铺
  10. Visual Studio 2015中使用Git