编译和运行此程序时,为什么我们得到“更大”而不是“等于”?我检查过,当我们将数据类型指定为int
时,我们得到“Less”,当指定为double
时,我们得到“Equal”。是什么原因?
#include <stdio.h>
int main(void)
{
float g = 9.8;
if (g == 9.8){
printf("Equal");
}
else if (g < 9.8){
printf("Less");
}
else{
printf("Greater");
}
return 0;
}
答案 0 :(得分:-1)
这是因为int
truncates
这个值,意味着它会删除小数部分而不进行舍入,因此将9.8
转换为int
(int) 9.8
给出9。
当g
输入double
时,它会返回equal
,因为默认的十进制数是double
。
当g
是float
时,您对float
和double
进行了比较,这是不好的,因为double
的精确点比float
意味着它可能导致不匹配。
表达式中使用的值被视为double(双精度浮点格式),除非在末尾指定了'f'。所以表达式“g == 9.8”在右侧有一个double和float,它们在左侧以单精度浮点格式存储。在这种情况下,浮动被提升为双倍。双精度格式比单精度格式使用更多位进行精度。
更多here。
但是,如果你这样做,你会得到平等:
#include <stdio.h>
int main(void)
{
float g = 9.8;
// Add the f to typecast to float
if (g == 9.8f) printf("Equal");
else if (g < 9.8) printf("Less");
else printf("Greater");
return 0;
}