首页 新闻 会员 周边 捐助

double - int 转换时的一个奇怪问题

0
悬赏园豆:10 [已解决问题] 解决于 2012-11-26 11:04

碰到一个奇怪的BUG,如下代码

double a =0.58 ;
int b = (int)(a * 100);

结果是b=57,
因为a*100 = 57.9999993

为什么?实在想不通。(目前只发现57,58存在这个问题)

C#
Müller的主页 Müller | 初学一级 | 园豆:122
提问于:2012-11-22 10:25
< >
分享
最佳答案
0

http://www.cnblogs.com/HarryHuang/archive/2010/03/21/1690910.html

浮点数的表示法问题。

可以换成 decimal 来避免此问题。

收获园豆:7
Launcher | 高人七级 |园豆:45050 | 2012-11-22 10:59

谢谢,解决倒是很容易,就是不知道为什么。而且不是每个数都这样。

Müller | 园豆:122 (初学一级) | 2012-11-23 09:34

@Müller: 这个问题说起来比较复杂,涉及到浮点数的二进制表示法,如果你有时间的话,可以转成二进制后再来计算,你就会发现问题了。顺便提一句,结果和第一位小数是 5 相关。

Launcher | 园豆:45050 (高人七级) | 2012-11-23 10:11
其他回答(2)
1

不仅是在C#中有这样的问题,在java中也会存在这样的问题,这是double的精度丢失问题

http://www.cnblogs.com/hongten/archive/2012/11/22/java_double.html

希望大家多多交流:hongtenzone@foxmail.com

收获园豆:1
Hongten | 园豆:1768 (小虾三级) | 2012-11-22 11:11
0

double a =0.58 ;

这个在计算机中可能表示为0.58000000000

也有可能是 0.579999999999

收获园豆:1
chenping2008 | 园豆:9836 (大侠五级) | 2012-11-22 13:06
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册