2017-09-17 2 views
1

Ich muss .5 als 0.5 mit der printf-Anweisung in C Sprache drucken. Es kann leicht mit dem folgenden Code getan werden.Formatieren float-Wert in C-Sprache

printf("%03f", myfloatvalue); 

Aber die Situation ist myfloatvalue dynamisch ist. Also ich bin mir nicht sicher, ob es eine 3-stellige Nummer ist, es könnte .5 oder .56 oder .567 sein. In den obigen Fällen muss ich als 0.5, 0.56 und 0.567 drucken.

+0

I 0,123456 ..so zeigen müssen kann ich printf ("% 0 * f", Orte, myfloatvalue); –

+1

Es gibt keine (exakte) Float-Repräsentation von 0,56 oder 0,567. –

Antwort

3

Fortsetzung von meinem Kommentar zu Florian Antwort, das Format der "%0g" wird die kürzeste Darstellung mit dem führenden Null ist, zum Beispiel drucken

#include <stdio.h> 

int main (void) { 

    float f[] = { .5, .56, .567 }; 
    size_t n = sizeof f/sizeof *f; 

    for (size_t i = 0; i < n; i++) 
     printf ("%0g\n", f[i]); 

    return 0; 
} 

Beispiel Verwendung/Output

$ ./bin/floatfmt 
0.5 
0.56 
0.567 
+2

Wie unterscheidet sich "% 0g" von "% g"? Es ist keine Mindestbreite angegeben, daher wird die Nummer niemals aufgefüllt. –

+0

Es druckt die führende ** Zero ** vor der Dezimalstelle ':)' ZB 'man printf' *" 0 Der Wert sollte Null aufgefüllt sein. Für d, i, o, u, x, X, a, A , e, E, f, F, g "* –

+1

Der C-Standard besagt, dass es bedeutet:" führende Nullen (nach jeder Angabe von Vorzeichen oder Basis) werden verwendet, um die Feldbreite aufzufüllen, anstatt Platzfüllung durchzuführen ". Da die Feldbreite nicht spezifiziert ist und kein Padding vorhanden ist, tut es nichts. Sie können testen, indem Sie 'printf ("% g ", 0.4);' was ich glaube, dass Sie '.4' ausgeben, ausgeben, aber" 0.4 "ausgeben. –

6

%g druckt die kürzestmögliche Darstellung eines Floats.

printf("%g",myfloatvalue); 
+0

Fast, "% 0g", würde es tun. –

+0

@ DavidC.Rankin [Ablehnen] (https://stackoverflow.com/questions/46263242/formatting-float-value-in-cli-language#comment79493574_46263402), dass eine 0 benötigt wird. – chux