js中 0.1+0.2=0.3?

在控制台输入0.1+0.2 == 0.3返回的结果竟然是false!!!!

我们输入0.1+0.2,看看结果,竟然是0.30000000000000004。


这是为什么呢?在《javascript权威指南》中有提到,js是不区分整数和浮点数的,JS采用的是IEEE 754标准定义的64位浮点格式表示数字,所以JS中的所有数字都是浮点数。按照JS的数字格式,整数有的范围是-2^53 ~ 2^53,而且只能表示有限个浮点数,能表示的个数为2^64 − 2^53 + 3个。至于为什么是这个范围,可以具体看看《JavaScript 中的数字》这篇文章也解下。而我们都知道,浮点数的个数是无限的,这就导致了JS不能精确表达所有的浮点数,而只能是一个近似值。

解决办法:

用parseInt将arg1*m转换为整数就可以了。
function accAdd(arg1,arg2){
var r1,r2,m;
try{r1=arg1.toString().split(".")[1].length}catch(e){r1=0}
try{r2=arg2.toString().split(".")[1].length}catch(e){r2=0}
m=Math.pow(10,Math.max(r1,r2))
return (parseInt(arg1*m,10)+parseInt(arg2*m,10))/m
}

附上:js的pow函数的解释更好理解上面的写法;

 

posted @ 2017-08-17 13:58  meonly  阅读(660)  评论(0编辑  收藏  举报