为什么两个整数的除法返回0.00?

时间:2015-06-03 06:04:08

标签: c printf format-specifiers

每次我运行这个程序时,我会得到不同的结果。那是为什么?

.removeEventListener()

4 个答案:

答案 0 :(得分:12)

float

该部门的输出再次为printf("%.2f", a/b); ,而非int

  1. 您使用了错误的格式说明符,这会导致未定义的行为。
  2. 您需要使用float类型的变量来执行您正在执行的操作。
  3. 打印出float的正确格式说明符是int

答案 1 :(得分:7)

在您的代码中,ab的类型为int,因此除法基本上是整数除法,结果为int

您无法随时使用错误的格式说明符。 %f要求相应的参数为double类型。您需要将%d用于int类型。

FWIW,使用错误的格式说明符调用undefined behaviour

来自C11标准,章节§7.21.6.1, fprintf()

  

如果任何参数不是相应转换规范的正确类型,则行为未定义。

如果您想要浮点除法,则需要通过

明确地执行此操作
  • 在分割之前提升其中一个变量来强制执行浮点除法,其结果将是浮点类型。

    printf("%.2f", (float)a/b);
    
  • 使用floata的{​​{1}}类型。

答案 2 :(得分:3)

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

这样的事情:

/Track It :\s*(?:<a href=".*">\s*(\d+)\s*<\/a>|$)/

<强> IDEONE DEMO

printf("%.2f", (float)a/b); 格式说明符适用于%f。使用错误的格式说明符将导致您未定义的行为。用int分割int会给你一个int。

答案 3 :(得分:0)

使用此代替printf()

sed 's/^\([^[:space:]][^[:space:]]*\)\([[:space:]][[:space:]]*\)\(.*\)/\3\2\1/' file