面试官提问3:js中 0.1 + 0.2 为什么不等于0.3?怎么才能等于0.3?

Posted 咖啡壶子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试官提问3:js中 0.1 + 0.2 为什么不等于0.3?怎么才能等于0.3?相关的知识,希望对你有一定的参考价值。

一. js中 0.1 + 0.2 为什么不等于0.3?

  • 因为浮点数运算的精度问题。在计算机运行过程中,需要将数据转化成二进制,然后再进行计算。
  • js中的Number类型遵循IEEE754标准,在IEEE754标准的64位浮点数相加,因为浮点数自身小数位数的限制而截断的二进制在转化为十进制,就变成0.30000000000000004,所以在计算时会产生误差。
  • 小数转化为IEEE754的过程:先转化为二进制的形式,然后再用科学计数法表示,接着把通过科学计数法表示的二进制数用IEEE754标准表示。

二.怎么才能等于0.3?

第一种办法:

使用Math类中的toFixed()方法,保留你需要的小数点位数。

第二种方法:

Number.EPSILON可以用来设置“能够接受的误差范围”。比如,误差范围设为 2 的-50 次方(即Number.EPSILON * Math.pow(2, 2)),即如果两个浮点数的差小于这个值,我们就认为这两个浮点数相等。

Number.EPSILON=(function()    
    //解决兼容性问题(IE10不兼容)
    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了

以上是关于面试官提问3:js中 0.1 + 0.2 为什么不等于0.3?怎么才能等于0.3?的主要内容,如果未能解决你的问题,请参考以下文章

如何解决JavaScript中0.1+0.2不等于0.3

如何解决JavaScript中0.1+0.2不等于0.3

解决JavaScript中0.1+0.2不等于0.3问题

热点面试题:为什么 0.1+ 0.2 != 0.3,如何让其相等?

前端面试 JavaScript— 0.1+0.2为什么不等于0.3?如何实现等于0.3?

为什么JS中0.1+0.2 != 0.3