【发布时间】:2019-09-20 13:07:52
【问题描述】:
能否解释一下下面代码的结果:
float f = 1.56898138E+09f;
double d = 1.56898138E+09;
int i = 1568981320;
bool a = f > i; //false
bool b = d > i; //true
bool c = (int)f > i; //true
为什么是a == false?
【问题讨论】:
-
float 为 32 位浮点数,double 为 64 位浮点数,int 为 32 位整数。
-
因为
float不够精确,无法代表1568981320。当1568981320转换为float时,结果为1568981380,因此f == i(int隐式提升为float,而不是相反)。顺便说一句,double足够精确,可以准确地表示所有可能的int值。
标签: c# floating-point comparison-operators