printf nachkommastellen
-
Hallo, wir möchten einen double so ausgeben, dass die Zahl auch nur so viele Kommastellen darstellt, wie vorhanden sind.
Beispiel:
Bei unserer Zahl 31,4 wird mit printf die Zahl 31,400000 ausgegeben.
Gibt es eine Möglichkeit, dass die Nullen wegfallen, so wie bei cout?mfg
Scaih
-
double d = 31.4; printf("%.1f\n",d);
-
Danke für die schnelle Antwort! Aber wenn jetzt eine Zahl eingegeben wird die mehr als 1 Nachkommastelle hat dann wäre diese weg, geht es nicht das er nur die Nullen weglässt?
-
Hier ist C++
warum nichtcout
?
-
Weil wir printf aus gewohnheit lieber nutzen und gerne wissen wollen ob die Ausgabe damit möglich ist wie mit cout.
-
Scaih schrieb:
Weil wir printf aus gewohnheit lieber nutzen und gerne wissen wollen ob die Ausgabe damit möglich ist wie mit cout.
Dann ist es dringend anzuraten, sich schnell umzugewöhnen. Sonst gewöhnt man sich etwas unpassendes immer weiter an.
-
Scaih schrieb:
Danke für die schnelle Antwort! Aber wenn jetzt eine Zahl eingegeben wird die mehr als 1 Nachkommastelle hat dann wäre diese weg, geht es nicht das er nur die Nullen weglässt?
das geht nicht!
Kann man vielleicht kaum glauben - ist aber so. In Deinem speziellen Fall steht im Speicher des Computers eben nicht 31,4 sondern vielleicht 31,399999999875. Bei der Ausgabe 'weiß' das Programm, dass es maximal z.B. 8 Stellen (inkl. der beiden Vorkommastellen) ausgeben kann und rundet dann auf 8 Stellen - also in Deinem speziellen Fall auf 31,400000.Solange Du dem Programm nicht sagst, auf wieviel Stellen die Zahl im Dezimalsystem(!) ausgegeben werden soll, solange gibt es auch keine Nullen, die weggelassen werden können. Die Zahl 31,4 existiert in dieser Form im Computer nicht.
-
Alles klar, damit wäre unsere Frage beantwortet. Danke für die Antworten!
-
Eine Möglichkeit gäbe es natürlich noch:
Den double in einen string schreiben, schauen, ob Nachkommastellen existieren und ggf. alle Nullen von hinten heraustreichen. Bei einem Array können alle '0' in 0 geändert werden.
-
printf mit Formatierungsangaben ist gut geeignet zur Umwandlung eines double in einen String. Achtung: es wird aber nur abgeschnitten, nicht auch gerundet. Ich verwende dafür eine selbstgestrickte Funktion dtoa(), die das gewünschte mit einer beliebigen Anzahl Nachkommastellen gerundet macht.
Schicke mir über mein Profil eine email, dann schicke ich dir die Funktion.
-
Scaih schrieb:
Hallo, wir möchten einen double so ausgeben, dass die Zahl auch nur so viele Kommastellen darstellt, wie vorhanden sind.
Beispiel:
Bei unserer Zahl 31,4 wird mit printf die Zahl 31,400000 ausgegeben.
Gibt es eine Möglichkeit, dass die Nullen wegfallen, so wie bei cout?mfg
ScaihMan nimmt im Formatstring einfach %g statt %f, dann werden die
überzähligen, unsignifikanten Nachkommastellen auch nicht ausgegeben.