Dezimalzahlen
Ein int enthält nur ganze Zahlen. Ein Preis kann aber Cent haben, und eine Körpergröße kann 1,68 m betragen. Für Zahlen mit Nachkommastellen hat C den Typ double:
double preis = 12.5;In C schreibt man Dezimalzahlen immer mit einem Punkt statt eines Kommas: 12.5, -0.25, 3.0.
Um einen double auszugeben, verwendest du %f statt %d (f wie floating point, Gleitkomma, die Art, wie Computer Dezimalzahlen speichern). %f gibt immer sechs Nachkommastellen aus. Meistens willst du weniger, dann schreibst du ihre Anzahl zwischen % und f, nach einem Punkt: %.2f gibt zwei Nachkommastellen aus, %.1f eine. Die Zahl wird gerundet:
double preis = 12.5;
double pi = 3.14159;
printf("%f\n", preis);
printf("%.2f\n", preis);
printf("%.1f\n", preis);
printf("%.2f\n", pi);Das gibt Folgendes aus:
12.500000
12.50
12.5
3.14Für Preise ist %.2f genau richtig: zwei Nachkommastellen, wie auf einem Kassenbon.
Die Formatangabe muss zum Wert passen: %d für einen int, %f für einen double. printf selbst kann nicht prüfen, was es bekommt; es vertraut der Formatzeichenkette. Auf einem anderen Computer könnte eine falsche Angabe eine unsinnige Zahl ausgeben, deshalb ist das auf dieser Seite ein Kompilierfehler:
#include <stdio.h>
int main(void) {
double preis = 12.5;
printf("Preis: %d\n", preis);
return 0;
}Der Compiler meldet:
main.c:5:27: error: format specifies type 'int' but the argument has type 'double' [-Werror,-Wformat]Das Format verlangt einen int, aber der Wert (das Argument) ist ein double. Unter der ersten Zeile schlägt der Compiler sogar %f vor. Es geht auch andersherum: %f mit einem int endet mit format specifies type 'double' but the argument has type 'int'.
Weitere typische Fehler:
- Ein Dezimalkomma: In vielen Ländern, auch bei uns, schreibt man 12,5. In C endet
double preis = 12,5;mit dem Fehlerexpected identifier or '(', weil das Komma in C etwas anderes bedeutet. - Eine Dezimalzahl in einem
int:int preis = 12.5;lässt sich kompilieren, aber gespeichert wird nur12. Die Nachkommastellen werden weggeworfen.
So schreibst du es:
Anweisungen
- 1
Lege darunter eine Variable
preisvom Typdoublemit dem Wert24.9an: den Preis eines Hefts. - 2
Gib sie in der nächsten Zeile mit
%fso aus:Preis: 24.900000. - 3
Sechs Nachkommastellen sind für einen Preis zu viel. Ändere
%fin%.2f, damit die ZeilePreis: 24.90zeigt. - 4
Gib in der nächsten Zeile aus, wie viel die drei Hefte kosten:
anzahl * preis. Eine Rechnung mit einemdoubleergibt einendouble, verwende also wieder%.2f:Gesamt: 74.70