为什么除非我使用变量,否则1/10等于零?

时间:2011-09-27 20:12:06

标签: c gcc

  

可能重复:
  Why can't I return a double from two ints being divided

此语句在C中使用gcc:

float result = 1 / 10;

生成结果0。

但如果我分别用值1和10定义变量a和b然后执行:

float result = a / b;

我得到0.1的预期答案

是什么给出了?

4 个答案:

答案 0 :(得分:11)

/运算符应用于两个整数时,它是一个整数除法。因此,1/10的结果为0。

/运算符应用于至少一个float变量时,它是一个浮点除法。结果将是0.1,如你所愿。

示例:

printf("%f\n", 1.0f / 10); /* output : 0.1 (the 'f' means that 1.0 is a float, not a double)*/
printf("%d\n", 1 / 10); /* output : 0 */

变量示例:

int a = 1, b = 10;

printf("%f\n", (float)a / b); /* output : 0.1 */

答案 1 :(得分:4)

这是因为110是整数常量,所以除法是使用整数运算完成的。

如果您的变量ab中至少有一个是float,则可以使用浮点算法完成。

如果您想使用数字文字,请使用表示法至少使其中一个为float字面值,例如:

float result = 1.0f / 10;

或者将其中一个投射到float,这会更精细:

float result = 1 / (float)10;

答案 2 :(得分:4)

1和10都是整数并且将返回一个整数,当您定义a和b时,您将其定义为float。如果使用1.0和10.0,它将返回正确的结果

答案 3 :(得分:0)

如果你想浮动而不是按照以下方式投射它。

float result =(float)a / b;