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

时间:2017-10-24 02:25:27

标签: c printf decimal number-formatting

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

有人能解释一下这里发生了什么吗?

2 个答案:

答案 0 :(得分:3)

在行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.
  4. 要实现预期的行为,请将(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使结果加倍。