我需要使用以下格式要求打印浮点数:
5.12345 应该只显示 5.1
5.0应该只5(没有.0)
5.0176应该只显示5(没有.01)
我以为printf()可以做这样的事......但现在我似乎无法让它发挥作用.
你可以使用"%g"得到你想要的结果
#include <stdio.h>
int main(int argc, char* argv[])
{
printf("%.6g\n", 5.12345f);
printf("%.6g\n", 5.0f);
printf("%.6g\n", 5.0176f);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
5.12345
5
5.0176
Run Code Online (Sandbox Code Playgroud)
"%g"将删除尾随零.
不是你描述的那样,不。如果你想要有条件的小数位,你必须自己做。
我已经有一段时间没有使用 printf 格式了,但这似乎在大多数情况下都有效
char *BuildConditionalFormat(double val)
{
int tenths = (int)(val * 10) % 10;
if (tenths == 0)
return ".0f";
return ".1f";
}
/* test rig */
float f = 5.0;
printf(BuildConditionalFormat(f), f); /* -> 5 */
f = 5.13;
printf("\n");
printf(BuildConditionalFormat(f), f); /* -> 5.1 */
printf("\n");
Run Code Online (Sandbox Code Playgroud)
这遵守了你的规则,但也提供了一个有趣的教训,说明为什么浮点很糟糕,因为 5.1 -> 5。为什么?因为 5.1 并不能(在我的机器上)清楚地表示为浮点数 - 它是 5.09999 以及更多变化。
您可能还需要了解 Floor() 和 ceil()...