首页新闻找找看学习计划

2074.70* 100=207469.99999999997 这是怎么回事啊

0
悬赏园豆:30 [已解决问题] 解决于 2013-01-05 15:46

2074.70* 100再转换为整数一直是207469,为什么会这样?

调试发现2074.70* 100的结果是207469.99999999997

J默的主页 J默 | 初学一级 | 园豆:186
提问于:2012-12-19 20:00
< >
分享
最佳答案
0

这是计算机的通用BUG,就浮点数存储会变,不管是JS、C#都一样,只是C#把这个问题处理了,你可以写如下代码 float a=12.1F,然后用IL 反汇编程序打开一看,a的值居然是12.199999999999,前面在园子里有位大神详细解释了此事,现在找不到那贴子了。

收获园豆:30
happydaily | 小虾三级 |园豆:648 | 2012-12-20 08:13

嗯,我后来查了,是跟将float值转换为二进制过程有关系,也就是说内存中的浮点数其实都是近似数;所以在实际中不要将float参与逻辑运算

J默 | 园豆:186 (初学一级) | 2012-12-20 10:07

@J默: 是这个意思,二进制转换不了,只有以5结尾的可以表示出来,比如0.5,0.25,实际在处理浮点数时都是从.分为两段,然后分别处理,最后再加起来的。

happydaily | 园豆:648 (小虾三级) | 2012-12-20 10:53
其他回答(7)
0

因为它要保留N位精度,可以在后面加个很小的小数就可以了:

(int)((2074.70+0.000000001) * 100)

向往-SONG | 园豆:4853 (老鸟四级) | 2012-12-19 20:27
0

数据类型呗

八戒的师傅 | 园豆:1472 (小虾三级) | 2012-12-19 21:18
0

parseInt(2074.70) * 100

iImax | 园豆:3138 (老鸟四级) | 2012-12-19 21:40
0

很简单,举个例子:

1.0其实在数据库中不一定就是真是1.0 可能是 0.99999999999999999999或者是1.0000000000000001

 

如果需要精确的表示浮点数,请用decimal

decimal a = 1.23m

chenping2008 | 园豆:9836 (大侠五级) | 2012-12-19 21:41
0

精度问题,浮点数都是不准确的, 可以使用 decimal类型。

Qlin | 园豆:2403 (老鸟四级) | 2012-12-20 09:00
0

楼上加一,用decimal

飞来飞去 | 园豆:2057 (老鸟四级) | 2012-12-20 09:20
0

类型问题  使用decimal

或者定义小数后加上M

比如2074.70M * 100

````` | 园豆:14268 (专家六级) | 2012-12-20 09:21
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册