もともと、次のコードを使用して、常に小数点以下2桁の浮動小数点数でsprintfを使用していました。
static void MyFunc(char* buffer, const float percentage)
{
sprintf(buffer, "%.2f", percentage);
}
渡されたパーセンテージ値の 1 つは 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 がバッファーに出力されないのでしょうか?
私の問題の正しい解決策は何ですか?