今天在一个C#练习100例中看到这么一段代码:
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);
2 double d_a = 2323.03d ;
3 bool b_a = (f_a == d_a);
4 Console.WriteLine(b_a);
例子中的注释里写道:”这里的结果是False,同是2323.03,因为数据类型不同,存储的长度也不同,其近似结果也不同,故不相等。“
存储长度不能拿来说事吧,总不成两头补了一堆0,就认为是数据值不同?这跟C#的自然风格好像不太符合呀,这儿应该是相等才合理嘛,在内部进行一个
将短类型转换成长类型再比较的隐式操作不行么?
那好,我手动强制进行转换再看看,
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);
2 double d_a = 2323.03d ;
3 bool b_a = (( double )f_a == d_a);
4 Console.WriteLine(b_a);
我忽然想到,那我把DOUBLE强制转换成FLOAT再比比看:
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);
2 double d_a = 2323.03d ;
3 bool b_a = (f_a == ( float )d_a);
4 Console.WriteLine(b_a);
那我再试试INT 跟FLOAT ,DOUBLE之间比怎么个情况:
代码
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);
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,,,,,,,
要么就干脆秉承强类型的风格,不同类型的不能比,要允许比了,就智能一点,这搞得。。。
以后要记住,不同类型的数值,不能乱比。即使强制类型转换了也不好使!