ITPub博客

首页 > Linux操作系统 > Linux操作系统 > .NET/C# 中float double相关的一个小知识点

.NET/C# 中float double相关的一个小知识点

原创 Linux操作系统 作者:iDotNetSpace 时间:2010-02-24 11:46:30 0 删除 编辑

  今天在一个C#练习100例中看到这么一段代码:

<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->1 float f_a = 2323.03f;
2 double d_a = 2323.03d;
3 bool b_a = (f_a == d_a);
4 Console.WriteLine(b_a);
说是输出结果是 FALSE,我还不信,结果一试没想还真是。。。。。有点无语,为什么呢?这一点也太容易让人犯错了吧。

  例子中的注释里写道:”这里的结果是False,同是2323.03,因为数据类型不同,存储的长度也不同,其近似结果也不同,故不相等。“

  存储长度不能拿来说事吧,总不成两头补了一堆0,就认为是数据值不同?这跟C#的自然风格好像不太符合呀,这儿应该是相等才合理嘛,在内部进行一个

将短类型转换成长类型再比较的隐式操作不行么?

  那好,我手动强制进行转换再看看,

<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->1 float f_a = 2323.03f;
2 double d_a = 2323.03d;
3 bool b_a = ((double)f_a == d_a);
4 Console.WriteLine(b_a);
结果仍然是FALSE,那我就真不明白了,强制转换了,还不相等,那就只能把这个FLOAT赋值给一个DOUBLE型变量再来比喽?真麻烦,搞不懂

  我忽然想到,那我把DOUBLE强制转换成FLOAT再比比看:

<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->1 float f_a = 2323.03f;
2 double d_a = 2323.03d;
3 bool b_a = (f_a == (float)d_a);
4 Console.WriteLine(b_a);
真是崩溃。。。。。这次竟然输出TRUE,相等了。。。。。。。。

  那我再试试INT 跟FLOAT ,DOUBLE之间比怎么个情况:

代码
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->1 int i_a = 23;
2 float f_a = 23f;
3 double d_a = 23d;
4 bool b_a = (i_a == f_a);
5 Console.WriteLine(b_a);
6 b_a = (i_a == d_a);
7 Console.WriteLine(b_a);

 

这次好了,两个TRUE,,,,,,,

  要么就干脆秉承强类型的风格,不同类型的不能比,要允许比了,就智能一点,这搞得。。。

  以后要记住,不同类型的数值,不能乱比。即使强制类型转换了也不好使!

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/12639172/viewspace-627724/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: c#泛型的使用
请登录后发表评论 登录
全部评论

注册时间:2008-01-04

  • 博文量
    2376
  • 访问量
    5766042