C: drucke einen Gleitkommawert

Lesezeit: 4 Minuten

Benutzeravatar von Roman Rdgz
Roman Rdgz

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

Benutzeravatar von Roman Byshko
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


Benutzeravatar von rohit
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.

Benutzeravatar von Igor Shubin
Igor Schubin

printf("%.<number>f", myFloat) //where <number> - digit after comma

http://www.cplusplus.com/reference/clibrary/cstdio/printf/

Probieren Sie diese aus, um das Problem der rechten Ausrichtung beim Fließkommadruck zu klären

printf(" 4|%4.1lf\n", 8.9);
printf("04|%04.1lf\n", 8.9);

die Ausgabe ist

 4| 8.9
04|08.9

Pangs Benutzeravatar
Stich

Verwenden %.6f. Dadurch werden 6 Dezimalstellen gedruckt.

Benutzeravatar von Shankar Raju
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

1421410cookie-checkC: drucke einen Gleitkommawert

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy