Moh*_*lah 2 c floating-point double
以下代码的输出是0.0000000
:
#include <stdio.h>
int main() {
float x;
x = (float)3.3 == 3.3;
printf("%f", x);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
而此代码输出1.000000
:
int main() {
float x;
x = (float)3.5 == 3.5;
printf("%f", x);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
2个代码唯一的区别是比较中的值,但是结果不一样,这是为什么呢?
这一行:
x=(float)3.3==3.3;
Run Code Online (Sandbox Code Playgroud)
比较(float)3.3
和3.3
是否相等并将结果分配给x
。由于转换,比较的左侧具有类型float
,而右侧具有类型double
,这是浮点常量的默认类型。
值 3.3 不能用二进制浮点精确表示,因此存储的实际值是一个近似值。由于类型float
和double
精度不同,此近似值将有所不同,因此相等性将评估为 false,即 0。这是分配给 的值x
。
关于x
当您检查的数字是 3.5 时为什么是 1 的评论,那是因为 3.5可以用二进制精确表示,并且两种类型都具有存储该值的精度,因此它们比较相等。