答案 0 :(得分:12)
float
该部门的输出再次为printf("%.2f", a/b);
,而非int
。
打印出float
的正确格式说明符是int
答案 1 :(得分:7)
在您的代码中,a
和b
的类型为int
,因此除法基本上是整数除法,结果为int
。
您无法随时使用错误的格式说明符。 %f
要求相应的参数为double
类型。您需要将%d
用于int
类型。
FWIW,使用错误的格式说明符调用undefined behaviour。
来自C11
标准,章节§7.21.6.1, fprintf()
如果任何参数不是相应转换规范的正确类型,则行为未定义。
如果您想要浮点除法,则需要通过
明确地执行此操作在分割之前提升其中一个变量来强制执行浮点除法,其结果将是浮点类型。
printf("%.2f", (float)a/b);
float
和a
的{{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