#include <stdio.h>
int main() {
double x = 10.4, y;
int m = 2;
y = x / m;
printf("%.1f\n", y);//5.2
printf("%.1f\n", (double)(7 / 2)); //3.0, why not 3.5 ?
printf("%.1f\n", 3.5f);//3.5
// the last line prints 3.5,
// why its not rounding down to 3.0 ,as it did above ?
}
有人能解释一下这里发生了什么吗?
答案 0 :(得分:3)
在行printf("%.1f\n", (double)(7 / 2));
中,操作顺序如下:
7/2 = 3
(double)3 = 3.0
printf("%.1f\n", 3.0);// Your problem becomes evident.
要实现预期的行为,请将(double)(7 / 2)
更改为7.0 / 2
(即printf("%.1f\n", 7.0 / 2);
然后您的代码将正确打印3.5
)。
7/2
将两个ints
分开,因此会自动将结果截断为3
integer division。然后,您将整数除法的结果转换为double
以生成3.0
。如果数学表达式中的一个数字是double
,则另一个被隐式地转换为double
,从而在结果中产生double
,可以避免所有这些麻烦。 / p>
答案 1 :(得分:3)
将printf("%.1f\n", (double)(7 / 2));
更改为printf("%.1f\n", (double)(7.0 / 2));
以获得所需的结果。 7.0
使结果加倍。