理解 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));
中,运算顺序如下:
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
。
将 printf("%.1f\n", (double)(7 / 2));
更改为 printf("%.1f\n", (double)(7.0 / 2));
以获得所需的结果。 7.0
使结果加倍。
#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));
中,运算顺序如下:
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
。
将 printf("%.1f\n", (double)(7 / 2));
更改为 printf("%.1f\n", (double)(7.0 / 2));
以获得所需的结果。 7.0
使结果加倍。