Ich möchte einen Float-Wert drucken, der 2 Integer-Ziffern und 6 Dezimalstellen nach dem Komma hat. Wenn ich nur benutze printf("%f", myFloat) Ich erhalte einen abgeschnittenen Wert.
Ich weiß nicht, ob dies immer in C passiert oder nur, weil ich C für Mikrocontroller verwende (CCS, um genau zu sein), aber in der Referenz wird das gesagt %f Holen Sie sich genau das: einen abgeschnittenen Float.
Wenn mein Schwimmer ist 44.556677ich drucke aus "44.55"nur die ersten beiden Dezimalstellen.
Die Frage ist also … wie kann ich meine 6 Ziffern drucken (und nur die sechs davon, nur für den Fall, dass ich danach Nullen habe oder so)?
%2.6f klingt wie die richtige Formatzeichenfolge, wenn Ihre Laufzeitbibliothek dies unterstützt.
– Jon
1. Dezember 2011 um 17:29 Uhr
Wenn Sie verwenden float dann erhalten Sie sowieso keine 8 sinnvollen signifikanten Dezimalstellen. Sie fordern mehr Genauigkeit als der Datentyp besitzt. Der nächste Schwimmer zu 44.556677 ist 44,55667 87719 72656 25
– David Heffernan
1. Dezember 2011 um 17:30 Uhr
@DavidHeffernan Wie viele sinnvolle Ziffern gibt es?
– Roman Byschko
1. Dezember 2011 um 17:33 Uhr
Jetzt ist ein geeigneter Zeitpunkt, um “Gleitkommazahlen sind nicht real” zur Sprache zu bringen: freshsources.com/FPNotReal.pdf
– Kennet Belenky
1. Dezember 2011 um 17:41 Uhr
@barlop Sechs Jahre später denke ich, dass ich damit leben werde, Mann
– Roman Rdgz
29. November 2017 um 15:52 Uhr
Roman Byschko
Sie können es so machen:
printf("%.6f", myFloat);
6 steht für die Anzahl der Ziffern nach dem Dezimaltrennzeichen.
Vielen Dank! Ich dachte daran, aber ich dachte nur, es könnte nicht so einfach sein!
– Roman Rdgz
1. Dezember 2011 um 17:38 Uhr
Das 2 bedeutet nicht die Anzahl der Stellen vor dem Komma, sondern das Minimum gesamt Feldbreite (die schon größer als 2 sein wird), also tut es hier nichts.
– Café
2. Dezember 2011 um 0:37 Uhr
printf("%9.6f", myFloat) gibt ein Format mit insgesamt 9 Zeichen an: 2 Ziffern vor dem Punkt, der Punkt selbst und sechs Ziffern nach dem Punkt.
%09.6f wäre vielleicht auch eine Option.
– Café
2. Dezember 2011 um 0:36 Uhr
@dasblinkenlight mit printf("%9.6f", myFloat) , wenn ich 3 Ziffern vor dem Punkt gebe, dann werden immer noch die 3 Ziffern vor dem Punkt gedruckt. kannst du bitte erklären warum das so ist?
– xyz
12. April 2016 um 8:53 Uhr
Und einer der Website codiereinheit.com/… Erklärung von ` %3.2f ` als (Druck als Fließkomma mit mindestens 3 Breite und einer Genauigkeit von 2) . Also ich bin jetzt verwirrt
– xyz
12. April 2016 um 9:22 Uhr
@xyz In Cs printf a %Nwo N eine Zahl ist, definiert immer das Ganze Minimum Breite der Komplett Ausgabe eines Feldes. %6s gibt immer mindestens 6 Zeichen aus (mehr, wenn die Zeichenkette länger ist). Kürzere Ausgaben werden gefüllt (in diesem Fall auf der linken Seite verwenden -N rechts auszufüllen). Es gibt keine Ausnahme für Schwimmer. %3f druckt mindestens 3 Zeichen, also 1.0 wird ausgegeben als __1 (zwei führende Leerzeichen werden als angezeigt _) wo 1.1 wird ausgegeben als 1.1 ohne Füllung hat es bereits 3 Zeichen. Daher hinein %N.Mf es gibt zumindest N-M-1 Raumzeichen vor dem Punkt.
– Tine
19. Juni 2021 um 8:42 Uhr
Rohit
printf("%0k.yf" float_variable_name)
Hier k ist die Gesamtzahl der Zeichen, die gedruckt werden sollen. k = x + 1 + y (+ 1 für den Punkt) und float_variable_name ist die Float-Variable, die Sie drucken möchten.
Angenommen, Sie möchten x-Ziffern vor dem Dezimalpunkt und y-Ziffern danach drucken. Wenn nun die Anzahl der Ziffern vor float_variable_name kleiner als x ist, werden automatisch so viele Nullen vorangestellt.
Igor Schubin
printf("%.<number>f", myFloat) //where <number> - digit after comma
Verwenden %.6f. Dadurch werden 6 Dezimalstellen gedruckt.
Shankar Raju
Sie müssen verwenden %2.6f Anstatt von %f in Ihrer printf-Anweisung
Es ist nicht richtig. Format “%2.6f” bedeutet Gesamtbreite von 2 Zeichen mit 6 Zeichen nach dem Komma.
– Walerij Wan
30. Juli 2013 um 18:39 Uhr
@ValeriyVan Das ist ein bisschen wie Erbsenzählerei, aber ich denke, es ist wichtig: Das 2 ist hier nicht falschaber es ist höchst überflüssig (nicht einmal überflüssig), was uns normalerweise sagt, dass der Autor verwirrt ist, wie printf funktioniert. %2.6f bedeutet “mindestens 2 Zeichen breit mit 6 Ziffern nach dem Punkt”. Da wir immer mindestens 8 Zeichen sehen werden, ist die 2 viel zu niedrig, um hier eine Wirkung zu haben, und das muss es sein 9 oder höher, um einen Effekt zu erzielen. Beachten Sie, dass wir reden nicht Mathe hier: Ein %+9.6f das 9 noch ist nicht erforderlich, wie %+.6f hat immer eine Breite von mindestens 9: sign, digit, dot, 6 digits
– Tine
19. Juni 2021 um 9:01 Uhr
14214100cookie-checkC: drucke einen Gleitkommawertyes
%2.6f
klingt wie die richtige Formatzeichenfolge, wenn Ihre Laufzeitbibliothek dies unterstützt.– Jon
1. Dezember 2011 um 17:29 Uhr
Wenn Sie verwenden
float
dann erhalten Sie sowieso keine 8 sinnvollen signifikanten Dezimalstellen. Sie fordern mehr Genauigkeit als der Datentyp besitzt. Der nächste Schwimmer zu44.556677
ist 44,55667 87719 72656 25– David Heffernan
1. Dezember 2011 um 17:30 Uhr
@DavidHeffernan Wie viele sinnvolle Ziffern gibt es?
– Roman Byschko
1. Dezember 2011 um 17:33 Uhr
Jetzt ist ein geeigneter Zeitpunkt, um “Gleitkommazahlen sind nicht real” zur Sprache zu bringen: freshsources.com/FPNotReal.pdf
– Kennet Belenky
1. Dezember 2011 um 17:41 Uhr
@barlop Sechs Jahre später denke ich, dass ich damit leben werde, Mann
– Roman Rdgz
29. November 2017 um 15:52 Uhr