#include <stdio.h>
int main(void)
{
float c =8/5;
printf("The Result: %f", c);
return 0;
}
答案是1.000000
。为什么不是1.600000
?
答案 0 :(得分:2)
C将您的8/5
输入解释为整数。对于整数,C将其截断为1。
将您的代码更改为8.0/5.0
。这样它就知道你正在使用实数,它会存储你正在寻找的结果。
答案 1 :(得分:1)
表达式
8/5
是一个全int
表达式。因此,它评估为(int )1
在作业中自动转换为float
。
如果你在除法之前转换为浮动,你将得到你想要的答案:
(float )8/5
或只是
8.0/5
答案 2 :(得分:0)
如果未指定使用的数据类型(例如,在代码中使用整数常量8
和5
),则C使用最小的合理类型。在您的情况下,它为整数类型分配了8
和5
,并且因为除法表达式的两个操作数都是整数,因此C生成了整数结果。整数没有小数点或小数部分,因此C截断结果。这会抛弃除法运算的剩余部分,而是使用1而不是1.6。
请注意,即使您将结果存储在浮点数中,也会发生这种情况。这是因为表达式是使用整数类型计算的,然后结果按原样存储。
至少有两种解决方法:
将表达式的一部分转换为可存储小数部分的double类型或其他类型:
此处8
被强制转换为double
类型,因此C将使用操作数执行浮点除法。请注意,如果您投射(8 / 5)
,则会在演员阵容之前执行整数除法。
foo = (double) 8 / 5
使用double作为操作数之一:
foo = 8.0/5