js解决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)&
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)
经验分享 程序员 微信小程序 职场和发展