可能重复:
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的预期答案
是什么给出了?
答案 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)
这是因为1
和10
是整数常量,所以除法是使用整数运算完成的。
如果您的变量a
和b
中至少有一个是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;