为什么我的浮子会被截断?

时间:2016-01-30 04:21:13

标签: c casting

 #include <stdio.h>

 int main(void)
 {
     float c =8/5;
     printf("The Result: %f", c);
     return 0;
 }

答案是1.000000。为什么不是1.600000

3 个答案:

答案 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)

如果未指定使用的数据类型(例如,在代码中使用整数常量85),则C使用最小的合理类型。在您的情况下,它为整数类型分配了85,并且因为除法表达式的两个操作数都是整数,因此C生成了整数结果。整数没有小数点或小数部分,因此C截断结果。这会抛弃除法运算的剩余部分,而是使用1而不是1.6。

请注意,即使您将结果存储在浮点数中,也会发生这种情况。这是因为表达式是使用整数类型计算的,然后结果按原样存储。

至少有两种解决方法:

将表达式的一部分转换为可存储小数部分的double类型或其他类型:

此处8被强制转换为double类型,因此C将使用操作数执行浮点除法。请注意,如果您投射(8 / 5),则会在演员阵容之前执行整数除法。

foo = (double) 8 / 5

使用double作为操作数之一:

foo = 8.0/5