理解 C 双格式化程序占位符

Understanding C double formatter placeholder

#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 ?
}

谁能解释一下这里发生了什么?

printf("%.1f\n", (double)(7 / 2));中,运算顺序如下:

  1. 7/2 = 3
  2. (double)3 = 3.0
  3. 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

printf("%.1f\n", (double)(7 / 2)); 更改为 printf("%.1f\n", (double)(7.0 / 2)); 以获得所需的结果。 7.0 使结果加倍。