C 将数据类型指定为int、float或double时会产生不同的结果
在编译和运行这个程序时,为什么我们得到的是“更大”而不是“相等”?我检查过,当我们指定数据类型为C 将数据类型指定为int、float或double时会产生不同的结果,c,C,在编译和运行这个程序时,为什么我们得到的是“更大”而不是“相等”?我检查过,当我们指定数据类型为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("Le
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;
}
#包括
内部主(空)
{
浮球g=9.8;
如果(g==9.8){
printf(“相等”);
}
否则,如果(g<9.8){
printf(“减去”);
}
否则{
printf(“更大”);
}
返回0;
}
这是因为int
截断了该值,这意味着它去掉了小数部分而不进行舍入,因此将9.8
转换为int
按(int)9.8
得到9
当g
类型为double
时,它返回equal
,因为默认情况下十进制数为double
当g
是一个float
时,您可以对float
和double
进行比较,这并不好,因为double
比float
有更多的精度点,这意味着它可能导致不匹配
表达式中使用的值被视为双精度(双精度浮点格式),除非在末尾指定了“f”。因此表达式“g==9.8”的右侧有一个double,左侧有一个以单精度浮点格式存储的float。在这种情况下,float被提升为double。双精度格式比单精度格式使用更多的精度位
更多
但是,如果你这样做,你会得到平等:
#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;
}
#包括
内部主(空)
{
浮球g=9.8;
//将f添加到typecast到float
如果(g==9.8f)printf(“相等”);
如果(g<9.8)printf(“较少”);
else printf(“更大”);
返回0;
}
它不适用于地板。它截断。@DanielA.White你说得对,它确实截断了。这样说是正确的,我会编辑,谢谢。可能值得指出的是,文本9.8
具有类型double
。十进制值9.8
不能完全以二进制开始表示。浮点文本9.8
的值必须在g
的赋值中转换为float
,但此双精度值将不适合float
。结果值是下一个较小的值还是下一个较大的值由实现定义。在比较中,此浮点
值转换为双精度
,保留浮点
的值。