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

您所在的位置:网站首页 问题解决的类型等于问题解决的策略嘛为什么 面试官提问js篇3:js中 0.1 + 0.2 为什么不等于0.3?怎么才能等于0.3?

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

2023-08-08 17:42| 来源: 网络整理| 查看: 265

一. 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)


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3