【发布时间】:2013-01-24 10:53:05
【问题描述】:
最初我使用带有浮点数的 sprintf 始终使用以下代码,小数点后 2 位:
static void MyFunc(char* buffer, const float percentage)
{
sprintf(buffer, "%.2f", percentage);
}
传递的百分比值之一是 0x419FFFFF 20(调试器视图),这会将 20.00 打印到缓冲区中。
我想在不是整数时显示 2 个小数位,例如
94.74 displayed as 94.74
94.7 displayed as 94.70
0 displayed as 0
5 displayed as 5
100 displayed as 100
我目前正在使用以下代码:
static void MyFunc(char* buffer, const float percentage)
{
int fractional_part = ((percentage - (int)percentage) * 100);
if (0 == fractional_part)
{
sprintf(buffer, "%d", (int)percentage);
}
else
{
sprintf(buffer, "%.2f", percentage);
}
}
现在如果通过 0x419FFFFF 20(调试器视图),小数部分计算为 99。我假设 fractional_part 的总和最终为 (19.99 - 19) * 100 = 99。为什么第一个示例不打印 19.99进入缓冲区?
我的问题的正确解决方案是什么?
【问题讨论】:
-
使用“%g”而不是上面链接中的“%d”
-
@MohamedKALLEL 这就是线程 unwind 所暗示的。在我看来,这确实是重复的。
-
我需要 2 位小数,%.2g,将总位数设置为 2 而不是小数位数。
标签: c floating-point printf