为什么两个整数相除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;
}

在您的代码中,ab 属于 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);
    
  • ab 使用 float 类型。

您需要将类型更改为 float 或 double。

像这样:

printf("%.2f", (float)a/b);

IDEONE DEMO

%f 格式说明符用于 float。使用错误的格式说明符将导致您出现未定义的行为。 int 除以 int 将得到一个 int。

printf("%.2f", a/b);

除法的输出也是 int 类型,而不是 float

  1. 您使用了错误的格式说明符,这将导致未定义的行为。
  2. 您需要有 float 类型的变量才能执行您正在执行的操作。

打印出 int 的正确格式说明符是 %d

用这个代替你的 printf()

printf("%.2lf",(double)a/b);