面试官提问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?的主要内容,如果未能解决你的问题,请参考以下文章
热点面试题:为什么 0.1+ 0.2 != 0.3,如何让其相等?