#include <stdio.h>
main()
{
float x;
x = (float)3.3==3.3;
printf("%f",x);
x=(float)3.5==3.5;
printf("\n%f",x);
}
我很困惑
在第一种情况下,答案是0.000
在第二种情况下,答案是1.00
任何人都可以解释一下吗?
答案 0 :(得分:4)
表达式
(float)3.3==3.3
首先将double
值转换为float
精度,从而更改其值,因为它在目标类型中不能完全表示。然后将float
值转换回double
,而不更改比较的值`,导致比较返回0(false)。 3.5在两种类型中都是完全可表示的,因此比较返回true(1)。
然后,在这两种情况下,比较的int
结果都会转换为float
以进行分配。
答案 1 :(得分:0)
默认情况下,右侧数字被拼写为双倍而不是浮点数。为了使两个案例都打印1,您需要将浮动类型转换更改为double或将第二个数字强制转换为float:
float x;
x = (float)3.3==(float)3.3;
printf("%f",x);
x=(float)3.5==(float)3.5;
printf("\n%f",x);
或:
float x;
x = (double)3.3==3.3;
printf("%f",x);
x=(double)3.5==3.5;
printf("\n%f",x);