为什么两个整数相除return0.00?
Why the division of two integers return 0.00?
每次我 运行 这个程序我都会得到不同的和奇怪的结果。这是为什么?
#include <stdio.h>
int main(void) {
int a = 5, b = 2;
printf("%.2f", a/b);
return 0;
}
在您的代码中,a
和 b
属于 int
类型,因此除法本质上是整数除法,结果是 int
。
任何时候都不能使用错误的格式说明符。 %f
要求相应的参数是 double
类型。您需要使用 %d
作为 int
类型。
FWIW,使用错误的格式说明符调用 undefined behaviour。
来自 C11
标准,章节 §7.21.6.1,fprintf()
If any argument is not the correct type for the corresponding conversion specification, the behavior is undefined.
如果你想要一个浮点除法,你需要通过
将除法前的变量之一提升为强制浮点除法,结果将是浮点类型。
printf("%.2f", (float)a/b);
- 为
a
和 b
使用 float
类型。
您需要将类型更改为 float 或 double。
像这样:
printf("%.2f", (float)a/b);
%f
格式说明符用于 float
。使用错误的格式说明符将导致您出现未定义的行为。 int 除以 int 将得到一个 int。
printf("%.2f", a/b);
除法的输出也是 int
类型,而不是 float
。
- 您使用了错误的格式说明符,这将导致未定义的行为。
- 您需要有 float 类型的变量才能执行您正在执行的操作。
打印出 int
的正确格式说明符是 %d
用这个代替你的 printf()
printf("%.2lf",(double)a/b);
每次我 运行 这个程序我都会得到不同的和奇怪的结果。这是为什么?
#include <stdio.h>
int main(void) {
int a = 5, b = 2;
printf("%.2f", a/b);
return 0;
}
在您的代码中,a
和 b
属于 int
类型,因此除法本质上是整数除法,结果是 int
。
任何时候都不能使用错误的格式说明符。 %f
要求相应的参数是 double
类型。您需要使用 %d
作为 int
类型。
FWIW,使用错误的格式说明符调用 undefined behaviour。
来自 C11
标准,章节 §7.21.6.1,fprintf()
If any argument is not the correct type for the corresponding conversion specification, the behavior is undefined.
如果你想要一个浮点除法,你需要通过
将除法前的变量之一提升为强制浮点除法,结果将是浮点类型。
printf("%.2f", (float)a/b);
- 为
a
和b
使用float
类型。
您需要将类型更改为 float 或 double。
像这样:
printf("%.2f", (float)a/b);
%f
格式说明符用于 float
。使用错误的格式说明符将导致您出现未定义的行为。 int 除以 int 将得到一个 int。
printf("%.2f", a/b);
除法的输出也是 int
类型,而不是 float
。
- 您使用了错误的格式说明符,这将导致未定义的行为。
- 您需要有 float 类型的变量才能执行您正在执行的操作。
打印出 int
的正确格式说明符是 %d
用这个代替你的 printf()
printf("%.2lf",(double)a/b);