参考地址:https://segmentfault.com/a/1190000012175422

0.1+0.2==0.3
// false

原因在于在JS中采用的IEEE 754的双精度标准,计算机内部存储数据的编码的时候,0.1在计算机内部根本就不是精确的0.1,而是一个有舍入误差的0.1。当代码被编译或解释后,0.1已经被四舍五入成一个与之很接近的计算机内部数字,以至于计算还没开始,一个很小的舍入错误就已经产生了。这也就是 0.1 + 0.2 不等于0.3 的原因。

另外要注意,不是所有浮点数都有舍入误差。二进制能精确地表示位数有限且分母是2的倍数的小数,比如0.5,0.5在计算机内部就没有舍入误差。所以0.5 + 0.5 === 1

有时两个近似值进行计算的时候,得到的值是在JS的近似范围内的,于是就可以得到正确答案。至于哪些值计算后能得到正确结果,哪些不能,我们也不需要去记。

如何避免这样的问题?

最好的方法就是我们想办法规避掉这类小数计算时的精度问题就好了,那么最常用的方法就是将浮点数转化成整数计算。因为整数都是可以精确表示的。

通常的解决办法 就是 把计算数字 提升 10 的N次方 倍 再 除以 10的N次方。一般都用 1000 就行了。

(0.1*1000+0.2*1000)/1000==0.3
//true

在js中为什么0.1+0.2不等于0.3相关推荐

  1. vue main.js中引入js_手把手教你深入Vue3.0(Vue-cli4)项目打包性能优化实践

    记录了自己的博客在禁用缓存的情况下,从八九秒加载时间到最终985ms的优化实践,开启缓存的情况下能达到138ms的访问速度 本人的个人博客采用的是Vue-cli4.1.2 + typescript构建 ...

  2. js中for(i in array)和for(i=0;i<array.length;i++)之间的坑

    前情提要 刚刚接触到js写for循环的时候,觉得for(i in array)这种格式简直是非常直观,比三段论的for循环好写得多.直到遇到了一个坑,事情是这样的: 最开始的网页中,鉴于方便,清一色使 ...

  3. matlab中 cos(pi/2) sin(pi)不等于0怎么办

    发现matlab中应该为零的 cos(pi/2). sin(pi)都为一个极小的值 查了半天,看到有人  关于MATLAB中cos(pi2)不等于0的问题_Azahaxia的博客-CSDN博客 但尝试 ...

  4. php if语句等于不等于0,java判断long不等于0

    java判断long不等于0 [2021-02-01 13:28:29]  简介: php不等于符号输入的方法:1.可以使用BASIC.PASCIC类语言的不等于符号[<>]:2.可以使用 ...

  5. JS中捉摸不透的==(宽松等于)

    首先来看一个有意思的面试题: if(a == 3 && a == 4){//... } 第一眼看到这个面试题我是拒绝的,这个等式根本不会成立,怎么会存在一个值既等于3并且还同时等于4呢 ...

  6. 当小数遇上二进制——全面解析JS中的小数二进制计算(附赠0.1+0.2 !== 0.3问题解释)

    二进制小数如何转换为十进制 二进制转换十进制的方法是: 从二进制数的最低位开始,每一位乘以对应的2的幂数,然后将最终的结果小数部分与整数部分分别相加 对应的2的幂,以个位为0,向高位依次增1,向地位依 ...

  7. C语言中的空指针、空指针常量、NULL 0

    C语言中的空指针.空指针常量.NULL & 0  本文转自: http://bbs.chinaunix.net/viewthread.php?tid=544415&extra=& ...

  8. C语言中判断浮点数是否等于0

    1.C语言中判断浮点数是否等于0: 2.C语言中判断两个浮点数是否相等: float.double分别遵循R32-24,R64-53的标准.他们尾数的位数分别是23.52,即误差在2^-23,2^-5 ...

  9. JS中的数据类型转换

    ES5中一共有6种数据类型,其中5种基本类型(String.Number.Boolean.Null.Undefined),1种引用类型(Object).基本类型值可以相互换转换,并且引用类型值也可以通 ...

  10. js中当等于最小值是让代码不执行_28 个JavaScript编程黑科技,装逼指南,高逼格代码,让你惊叹不已...

    Javascript 是一门很厉害的语言,我可能学了假的 JavaScript,哈哈,大家还有什么推荐的,欢迎补充. 1.单行写一个评级组件 "★★★★★☆☆☆☆☆".slice( ...

最新文章

  1. linux环境安装部署mark
  2. Mysql的float double decimal
  3. PHP XAMPP配置PHP环境和Apache80端口被占用解决方案
  4. 【HDU - 5500】 Reorder the Books (思维)
  5. 2006年四种思路帮你创业
  6. 下列关于java集合说法错误的是_下列关于Spring的说法错误的是( )。
  7. mysql主从配置自增id_MySQL自增列主从不一致的测试(r12笔记第37天)
  8. JavaScript:对象转换为字符串、字符串转换为对象
  9. 美赛数学建模O奖论文下载
  10. SPSS(十五)spss之聚类分析(图文+数据集)
  11. 51单片机:8051指令简介
  12. Flipped 阅读笔记
  13. centos7更换yum仓库、静态IP、SSH密钥登陆
  14. mysql 左连接都是null_sql左连接有疑问,为什么查出来都是null,而不是没有数据?...
  15. 【便签纸】记录一次Linux服务器上通过sftp上传文件时的错误
  16. Fedformer中的小波变换(FEB-w模块)
  17. 解决虚拟机打不开Ubuntu的问题:
  18. 【重大突破】——移动端——如何手机端屏蔽掉网站,【小技巧】戒应用AppDetox,一个可以屏蔽管理APP的自律软件,马克保存
  19. 超级牛bi的软件工具大全 珍藏版【人手一份】
  20. 力扣 23. 合并K个升序链表

热门文章

  1. dingo php,Laravel+Dingo/Api 自定义响应 | 码农网
  2. Win10电脑浏览器连不上网
  3. jsp页面打开为空白页
  4. 万邦京东获取商品历史价格信息 API
  5. 网络准入控制(NAC)部署经验
  6. 蓝桥杯2016年第七届真题-碱基
  7. miui9免解锁root,Miui解锁
  8. Unity和Easy AR制作一个AR的APP
  9. HttpServletRequest获取路径的几个方法
  10. 计算机网络(谢希仁-第八版)第一章习题全解