本來我是使用下面的代碼使用的sprintf花車總是有2位小數:用sprintf格式化不帶小數位浮動,如果整數
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打印到緩衝區?
什麼是我的問題的正確解決方案?
的可能重複[只顯示小數點如果浮點組件不.00的sprintf/printf的(HTTP ://stackoverflow.com/questions/838064/only-show-decimal-point-if-floating-point-component-is-not-00-sprintf-printf) – unwind
使用「%g」而不是「%d」作爲在上面的鏈接中指出 – MOHAMED
@MohamedKALLEL這就是所謂的解開線程所暗示的。在我看來,它確實是一個重複。 – junix