Verwenden Sie sprintf formatieren Schwimmer, die keine Dezimalstellen, wenn integer

Ursprünglich war ich mit sprintf mit floats immer mit 2 Nachkommastellen verwenden Sie den folgenden code:

static void MyFunc(char* buffer, const float percentage)
{
    sprintf(buffer, "%.2f", percentage);
}

Einer der Prozentwerte übergeben wurde 0x419FFFFF 20 (debugger-Ansicht), diese gedruckt 20.00 Uhr in den buffer.

Möchte ich stattdessen zeigen, 2 Dezimalstellen, wenn nicht eine ganze Zahl, z.B.

94.74 displayed as 94.74
94.7  displayed as 94.70
0     displayed as 0
5     displayed as 5
100   displayed as 100

Ich bin derzeit mit dem folgenden code:

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);
    }
}

Nun, wenn 0x419FFFFF 20 (debugger-Ansicht) übergeben wird, Nachkommastellen berechnet als 99. Ich nehme an, dann ist die Summe für fractional_part endet als (19.99 - 19) * 100 = 99. Warum dann nicht das erste Beispiel nicht drucken 19.99 in den buffer?

Was ist die richtige Lösung für mein problem?

möglich, Duplikat der Nur zeigen, Dezimalpunkt, wenn Fließkomma-Komponente ist nicht .00 sprintf/printf
verwenden Sie "%g" anstelle von "%d", wie dies in dem oben genannten link
Das ist, was der thread entspannen bezeichnet wird, was darauf hindeutet. Meiner Meinung nach ist es wirklich ein Duplikat ist.
Ich verlange, dass 2 Nachkommastellen, %.2g, legt die Gesamtanzahl der Ziffern auf 2, nicht auf die Anzahl der Dezimalstellen.

InformationsquelleAutor integra753 | 2013-01-24

Schreibe einen Kommentar