Verwenden Sie printf, um Floats ohne Dezimalstellen zu formatieren, wenn nur abschließende Nullen vorhanden sind
Lesezeit: 3 Minuten
Ist es möglich, einen Float in C so zu formatieren, dass er nur bis zu 2 Dezimalstellen anzeigt, wenn er sich von 0 unterscheidet, indem er printf verwendet?
Beachten Sie, dass im Gegensatz zu f Formatbezeichner, wenn Sie eine Zahl vor dem angeben g es bezieht sich auf die Länge der gesamten Zahl (nicht die Anzahl der Nachkommastellen wie bei f).
die willst du noch haben %.2g so dass es auf 2 Dezimalstellen begrenzt ist.
– twain249
9. März 2012 um 4:00 Uhr
Übrigens für die f Formatbezeichner die Zahl repräsentiert Dezimalziffern, aber für g es ist die Gesamtlänge der Nummer.
– mechanisches_Fleisch
9. März 2012 um 4:11 Uhr
Wow, das scheint ein kompliziertes Warum zu sein. Ich dachte so etwas wie sprintf(temp, "%f", f); temp2 = strchr(temp, '.'); i = temp2-temp; printf(%.*g\n", (i+2), f); aber ich weiß nicht ob das wirklich geht. Ich denke, ich werde es versuchen.
– twain249
9. März 2012 um 4:22 Uhr
Was leider nicht gut ist %gist, dass es möglicherweise die Zahl abschneidet und Sie beispielsweise die Genauigkeit verlieren printf("%g", 1363262708.988428) werde dir geben 1.36326e+09jedoch mit %f Es wird korrekt gedruckt (genau 1363262708.988428).
– ivanzoid
14. März 2013 um 12:23 Uhr
@ivanzoid: Das Problem kann mit gelöst werden "%.14g" statt nur "%g" (Ich denke nicht, dass die Zahl 14 zu wichtig ist; das habe ich in Luas Quellcode gefunden).
– Nicolo M.
29. April 2014 um 13:14 Uhr
Aus unserer Diskussion in der obigen Antwort ist hier mein Programm, das für eine beliebige Anzahl von Ziffern vor dem Dezimalzeichen funktioniert.
Siehe auch: stackoverflow.com/questions/277772/…
– Mike Kwan
9. März 2012 um 3:48 Uhr