首页 新闻 会员 周边 捐助

一个浮点数精度问题,呼唤达人

0
[已解决问题] 解决于 2010-09-20 20:39

谁能解释一下下面这个现象:

(double)(float)0.6
0.60000002384185791
(double)0.6f
0.60000002384185791
(double)(6/10f)
0.6
(double)(float)(6/10f)

0.6

6/10f 明明是个float,为什么转换成double后和0.6f转成double的结果不一样?

John Rambo的主页 John Rambo | 菜鸟二级 | 园豆:210
提问于:2010-09-20 12:41
< >
分享
最佳答案
0

float a = 0.6f;
float b = 6/10f;
double c = (double)a;
double d = (double)b;
double e = Convert.ToDouble(6/10f);

double f = (double)(6/10f);

这种精度丢失问题,我搞不清楚,下面链接你参考下:

http://www.cnblogs.com/wodehuajianrui/archive/2009/03/18/1415173.html

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

_A_A | 小虾三级 |园豆:1139 | 2010-09-20 20:27
谢谢
John Rambo | 园豆:210 (菜鸟二级) | 2010-09-20 20:39
其他回答(1)
0

楼主是否可以把源码帖出,我测试了一下:

   class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine((double)(float)(6/10f));
        }
    }

运行结果为:0.600000023841858。你需要查一下double精度的有效位。

X教授 | 园豆:240 (菜鸟二级) | 2010-09-20 13:20
我是在immediate window里运行的
支持(0) 反对(0) John Rambo | 园豆:210 (菜鸟二级) | 2010-09-20 20:31
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册