首页 新闻 搜索 专区 学院

js 计算的问题

0
悬赏园豆:30 [已解决问题] 解决于 2014-12-04 10:38

在js中做一个乘法,把每一个数都乘以一个0.1,但是出来的结果有点出乎意料,写的方式如图:

求帮忙解释一下为什么33 34的结果会是这样

js
最长的路漫漫的主页 最长的路漫漫 | 菜鸟二级 | 园豆:252
提问于:2014-12-03 18:45
< >
分享
最佳答案
0

JS的数字类型只有number,数据全是已浮点方式存储的。所以无可避免的又误差。遇到这种,一般采用toFixed(2),来获取近似值。

收获园豆:15
幻天芒 | 高人七级 |园豆:36594 | 2014-12-03 19:57
其他回答(3)
0

float类型运算时是很容易出误差的。你可以*10把小数位弄没,再运算。然后/10弄回去

收获园豆:5
吴瑞祥 | 园豆:28820 (高人七级) | 2014-12-03 21:52
0

如果只是看看你举的例子,很好解释的:因为b=0.1; 1/b=10;所以33/10=3.3; 34/10=3.4;

不好解释的地方在于:为什么33*0.1=3.3000000000000003; 但是31*0.1=3.1;

就好象0.1+0.2=0.30000000000000004; 但是0.1+0.3=0.4;

按照我的理解应该都会产生很多小数的

收获园豆:5
ThreeTree | 园豆:1490 (小虾三级) | 2014-12-03 22:49
0

我是这样理解的,float类型的,都是取近似值。实际上得到的是近似值。

收获园豆:5
Mr.Brian | 园豆:1518 (小虾三级) | 2014-12-04 09:18

你需要去看下数据的机内表示

支持(0) 反对(0) 吴瑞祥 | 园豆:28820 (高人七级) | 2014-12-04 14:47
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册