Fließkommaformatierung in printf ()

8

Ich habe eine Reihe von Fließkommazahlen, in denen Daten mit unterschiedlichen Dezimalstellen gespeichert werden, also einige sind 123.40000 , 123.45000 , 123.45600 ... jetzt, wenn ich diese Werte in der Zeichenkette ohne die 0s in der drucken möchte end in printf() , so dass sie 123.4 , 123.45 , 123.456 sind, ohne diese 0 am Ende. Ist das möglich? Wenn ja, wie?

    
sfactor 07.12.2009, 23:22
quelle

4 Antworten

18

Verwenden Sie den% g Formatierer:

%Vor%

druckt

123.4

Nachgestellte Nullen werden entfernt, aber leider auch der nachgestellte Dezimalpunkt, wenn der Bruchteil Null ist. Ich weiß nicht, ob es tatsächlich irgendeinen Weg gibt, das zu tun, was man direkt mit printf () machen möchte - ich denke, so etwas ist wahrscheinlich die beste Wahl:

%Vor%     
anon 07.12.2009, 23:26
quelle
3

Ich weiß nicht, wie hacky das ist, aber:

Ссылка

%Vor%

Gibt 124.0 zurück.

%Vor%

Gibt 124.123 zurück.

    
Nick Presta 08.12.2009 00:04
quelle
0

Verwenden Sie% g -

Drucken Sie ein Double in normaler oder Exponentialschreibweise, je nachdem, was für seine Größe geeigneter ist. 'g' verwendet Kleinbuchstaben, 'G' verwendet Großbuchstaben. Dieser Typ unterscheidet sich geringfügig von der Festkomma-Notation, da unwesentliche Nullen rechts vom Dezimalpunkt nicht enthalten sind. Außerdem ist der Dezimalpunkt nicht in ganzen Zahlen enthalten.

    
Mick Walker 07.12.2009 23:28
quelle
0

Drucken Sie auf einen (ausreichend großen) Puffer. Drucken Sie den Puffer ... und wenn es keinen '.' im Puffer gibt, drucken Sie einen Punkt.

%Vor%

Bearbeiten

Der Standard gibt das # -Flag an:

  

# Das Ergebnis wird in eine "alternative Form" umgewandelt. [...] Für ein, A,   e, E, f, F, g und G Konvertierungen, das Ergebnis der Umwandlung eines Fließkommas   Nummer enthält immer ein Dezimalzeichen, auch wenn keine Ziffern folgen   es. [...] Bei g- und G-Konvertierungen werden nachfolgende Nullen nicht entfernt   das Ergebnis. [...]

... aber Sie erhalten die abschließenden Nullen: (

    
pmg 08.12.2009 00:43
quelle