2
#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 感到困惑,谁能解释一下?

4

2 回答 2

4

表达方式

(float)3.3==3.3

首先将double值 3.3 转换为float精度,从而改变它的值,因为它在目标类型中不能完全表示。然后将该float值转换回double,而不更改用于比较的值`,导致比较返回 0 (false)。3.5 在两种类型中都可以精确表示,因此比较返回 true (1)。

然后在这两种情况下int,比较的结果都被转换float为赋值。

于 2012-10-01T15:01:05.457 回答
0

默认情况下,右侧数字被转换为双精度而不是浮点数。为了让这两种情况都打印 1,您需要将浮点类型转换更改为双精度或将第二个数字类型转换为浮点数:

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);
于 2012-10-01T15:07:26.943 回答