Zwei Dezimalstellen mit printf()

Lesezeit: 2 Minuten

Ich versuche, eine Zahl mit zwei Dezimalstellen zu schreiben printf() folgendermaßen:

#include <cstdio>
int main()
{
  printf("When this number: %d is assigned to 2 dp, it will be: 2%f ", 94.9456, 94.9456);
  return 0;
}

Wenn ich das Programm starte, bekomme ich folgende Ausgabe:

# ./printf
When this number: -1243822529 is assigned to 2 db, it will be: 2-0.000000

Warum ist das so?

Vielen Dank.

  • Der Teil -1234 … ist die Darstellung Ihres 32-Bit-Gleitkommas als Ganzzahl. Der zweite Teil ist falsch, Sie sollten %2.2f haben, aber ich kann den Teil -0.0000… immer noch nicht erklären. Ich für meinen Teil erhalte ein korrektes Ergebnis, außer dass beim Ausführen Ihres Codes eine zusätzliche 2 vor dem Float steht.

    Benutzer173973

    24. Januar 2011 um 16:30 Uhr

  • @nvm: Die Nullen werden angezeigt, weil 94,9456 als Double (8 Bytes) auf den Stapel geschoben wurde und %d die ersten 4 Bytes als Ganzzahl verarbeitet hat und die nächsten 4 Bytes Nullen waren und der Code dann diese 4 nachgestellten gelesen hat Bytes von der ersten Zahl plus die führenden 4 Bytes der zweiten Gleitkommazahl und versucht, sie als Double zu behandeln. Die Antwort war so klein, dass das Festkommaformat sie als Null behandelt. Und dies wurde auf einem Intel-Chip ausgeführt, nicht auf einer RISC-Maschine.

    – Jonathan Leffler

    24. Januar 2011 um 17:01 Uhr


  • Scheint, dass das Setzen einer Ganzzahl vor “f” wie “%10f” keine Wirkung hat, da es genauso ist, als würde man “%f” schreiben? Ich habe das versucht und bekomme nur das Ergebnis, als ob es “% f” wäre.

    aali

    24. Januar 2011 um 17:13 Uhr

Benutzeravatar von Badgerr
Dachs

Was Sie wollen, ist %.2fnicht 2%f.

Außerdem möchten Sie vielleicht Ihre ersetzen %d mit einer %f 😉

#include <cstdio>
int main()
{
printf("When this number: %f is assigned to 2 dp, it will be: %.2f ", 94.9456, 94.9456);
return 0;
}

Dies wird ausgeben:

Wenn diese Nummer: 94.945600 2 dp zugewiesen wird, lautet sie: 94.95

Hier finden Sie eine vollständige Beschreibung der printf-Formatierungsoptionen: printf

Verwenden: "%.2f" oder Variationen davon.

Siehe die Posix spec für eine maßgebliche Spezifikation der printf() Zeichenfolgen formatieren. Beachten Sie, dass es die POSIX-Extras von der C99-Kernspezifikation trennt. Es gibt einige C++-Sites, die in einer Google-Suche auftauchen, aber einige haben zumindest einen zweifelhaften Ruf, wenn man die Kommentare an anderer Stelle auf SO betrachtet.

Da Sie in C++ programmieren, sollten Sie dies wahrscheinlich vermeiden printf() und seine Angehörigen.

Benutzeravatar von Rozuur
Rozuur

Zum %d Teil beziehen sich auf diesen Wie funktioniert dieses Programm? und für Dezimalstellen verwenden %.2f

Versuchen Sie es mit einem Format wie %d.%02d

int iAmount = 10050;
printf("The number with fake decimal point is %d.%02d", iAmount/100, iAmount%100);

Ein anderer Ansatz besteht darin, es zu verdoppeln, bevor es mit %f wie folgt gedruckt wird:

printf("The number with fake decimal point is %0.2f", (double)(iAmount)/100);

Meine 2 Cent 🙂

1419510cookie-checkZwei Dezimalstellen mit printf()

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

Privacy policy