JavaScript 中最臭名昭著的 Bug 就是 0.1 + 0.2 !== 0.3

阅读: 评论:0

JavaScript 中最臭名昭著的 Bug 就是 0.1 + 0.2 !== 0.3

JavaScript 中最臭名昭著的 Bug 就是 0.1 + 0.2 !== 0.3

js解决0.1+0.2==0.3的问题的几种方法
JavaScript有7种基本类型分别是: Undefined, Null, Boolean, String, Number, Symbol, Object.

对于JS中的Number类型, 不区分整数和浮点数, 浮点数的精度远远不如整数, 首先先看一下为什么会出现这个问题, 根据双精度浮点数的定义, Number类型的有效整数范围是-0XFFFFFFFFFFF至0X1FFFFFFFFFF,所以无法精确到超过这个范围的整数.

解决办法
1.ES6提供的Number.EPSILON方法

function numbersequal(a,b){ return Math.abs(a-b)<Number.EPSILON;
} 
var a=0.1+0.2, b=0.3;
console.log(numbersequal(a,b)); //true

考虑兼容性的问题了,在chrome中支持这个属性,但是IE并不支持(笔者的版本是IE10不兼容),所以我们还要解决IE的不兼容问题。

Number.EPSILON=(function(){   //解决兼容性问题return Number.EPSILON?Number.EPSILON:Math.pow(2,-52);})();
//上面是一个自调用函数,当JS文件刚加载到内存中,就会去判断并返回一个结果,相比if(!Number.EPSILON){//   Number.EPSILON=Math.pow(2,-52);//}这种代码更节约性能,也更美观。
function numbersequal(a,b){ return Math.abs(a-b)<Number.EPSILON;}
//接下来再判断   var a=0.1+0.2, b=0.3;console.log(numbersequal(a,b)); //这里就为true了

2.把计算数字 提升 10 的N次方 倍 再 除以 10的N次方。N>1.

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

本文发布于:2024-01-30 04:17:03,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170655942519149.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:臭名昭著   Bug   JavaScript
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23