最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

探讨javascript浮点值运算是舍入误差的原因

来源:懂视网 责编:小采 时间:2020-11-27 20:16:28
文档

探讨javascript浮点值运算是舍入误差的原因

探讨javascript浮点值运算是舍入误差的原因:问题在javascript中整数和浮点数都属于Number数据类型(简单数据类型中的一种),我们经常会发现在打印1.0这样的浮点数的结果是1而非1.0,这是由于保存浮点数的内存空间是保存整数值的两倍,所以ECMAScript会不失时机地将浮点数转换为整数。 上面这种情况虽
推荐度:
导读探讨javascript浮点值运算是舍入误差的原因:问题在javascript中整数和浮点数都属于Number数据类型(简单数据类型中的一种),我们经常会发现在打印1.0这样的浮点数的结果是1而非1.0,这是由于保存浮点数的内存空间是保存整数值的两倍,所以ECMAScript会不失时机地将浮点数转换为整数。 上面这种情况虽

问题

在javascript中整数和浮点数都属于Number数据类型(简单数据类型中的一种),我们经常会发现在打印1.0这样的浮点数的结果是1而非1.0,这是由于保存浮点数的内存空间是保存整数值的两倍,所以ECMAScript会不失时机地将浮点数转换为整数。
上面这种情况虽然让强迫症患者有点不舒服,但是好歹也不是什么大错,接下来这种情况就很吓人了。例如我们在计算0.10.2时,它的输出结果不是0.3,而是0.3000000000000004。what the fuck?!第一次遇到这种情况的童鞋有没有感觉到世界观受到了挑战?

产生原因

于是赶快翻书来拯救自己的灵魂以及肉体,发现书中赫然写着:ECMAScrip是基于IEEE754数值浮点计算,这种数值计算方法会将数值保存为二进制然后进行计算,由于浮点数用二进制表达时是无穷的,所以在进行算术计算时会产生舍入误差,由于舍入误差的存在,浮点数计算的精确度远远不如整数计算,最后记住了永远不要测试某个特定浮点数的数值。

解决方案

所谓对症下药,知道了问题产生的原因那么就可以找到问题的解决方案啦。既然是由于浮点数的二进制为无穷数产生的误差,这种误差在整数运算中不会存在,聪明的你是不是窥破真相了呢?没错,那就是在运算工程中将浮点数转换为整数,再将得出的结果转换为浮点数。客官,下面是新鲜上的代码~

1 //加法 2 function FloatAdd(arg1,arg2){ 
3 var r1,r2,m; 
4 try{r1=arg1.toString().split(".")[1].length}catch(e){r1=0; //参数1为整数}; //参数1小数点后的位数5 try{r2=arg2.toString().split(".")[1].length}catch(e){r2=0; //参数2为整数}; //参数2小数点后的位数6 m=Math.pow(10,Math.max(r1,r2)); //取其中较大的位数7 return (arg1*m+arg2*m)/m; //先将arg1和arg2转换为整数进行计算,然后再转换回浮点数8 }


以上转载 附上原网址


toFixed() 方法应该也可以傻瓜式地处理一部分舍入误差问题。

语法:number.toFixed(x) x:规定小数的位数,是 0 ~ 20 之间的值,包括 0 和 20,有些实现可以支持更大的数值范围。如果省略了该参数,将用 0 代替。


END


文档

探讨javascript浮点值运算是舍入误差的原因

探讨javascript浮点值运算是舍入误差的原因:问题在javascript中整数和浮点数都属于Number数据类型(简单数据类型中的一种),我们经常会发现在打印1.0这样的浮点数的结果是1而非1.0,这是由于保存浮点数的内存空间是保存整数值的两倍,所以ECMAScript会不失时机地将浮点数转换为整数。 上面这种情况虽
推荐度:
标签: 计算 运算的 探讨
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top