Nachkommastellen in C
Nachkommastellen werden nicht etwa durch ein Komma, sondern durch einen Punkt abgetrennt. Die Zahl ‹ 12,23 › wird in C also als »12.23« geschrieben.
- Numeralia mit dem Wert Zwölf
12
12.0
12.00- Numeralia mit verschiedenen Werten
12.45
12.9876432
1.2
87.0
Die Umwandlungspezifikation »%g«
Der Wert eines Numerale mit einem Punkt ».« kann mit der Umwandlungsspezifikation »%g« ausgegeben (»%d« oder »%s« kann hierfür nicht verwendet werden).
main.c
#include <stdio.h>
int main( void )
{ printf
( "%g\n", 12.0 ); }stdout
12
Eine Folge von Nullen, die ganz am Ende eines Numerales mit einem Punkt steht, trägt nicht zu seinem Wert bei.
Der Ausdruckrahmen
Wir erweitern unseren Ausdruckrahmen nun um einen weiteren Umwandlungsspezifizierer »g«.
- Der Ausdruckrahmen
#include <stdio.h>
- int main( void )
{ printf
( "%…\n", … ); } - Umwandlungsspezifizierer und Ausdrücke
... ... Merkwort
s "Text" s-tring
d 123 d-ezimalsystem
g 1.23 g-leitkommazahl
Wir blenden bis auf weiteres geistig alles außer den Umwandlungsspezifizierer und den Ausdruck aus.
main.c
#include <stdio.h>
int main( void )
{ printf
( "%s\n", "Hallo, Welt" ); }- main.c (Sicht)
##################
################
########
####s#####"Hallo, Welt"#####
Fachbegriffe
»d«, »g« und »s« sind Umwandlungsspezifizierer.
»%d«, »%g« und »%s« sind Umwandlungsspezifikationen.
Folgende Nullen
Die Zahl Zwölf kann daher sowohl als »12.00« als auch als »12.0« geschrieben werden.
main.c
#include <stdio.h>
int main( void )
{ printf
( "%g\n", 12.00 ); }stdout
12
Nullen am Ende dürfen auch ganz weggelassen werden, so daß für die Zahl Zwölf auch die Schreibweise »12.« erlaubt ist.
main.c
#include <stdio.h>
int main( void )
{ printf
( "%g\n", 12. ); }stdout
12
Falls die Ausgabe mehrerer folgender Nullen gewünscht wird, so kann ein Zeichenfolgenliteral verwendet werden.
main.c
#include <stdio.h>
int main( void )
{ printf
( "%s\n", "12.00" ); }stdout
12.00
Führende Nullen
Eine Null vor dem Punkt darf auch ganz weggelassen werden, wenn später noch Ziffern folgen.
main.c
#include <stdio.h>
int main( void )
{ printf
( "%g\n", .12 ); }stdout
0.12
Kürzung der Ausgabe
Bei der Ausgabe eines Wertes mit Nachkommastellen wird dieser manchmal auf ein bestimmte Anzahl von Stellen abgeschnitten. Dies liegt daran, daß die C -Implementation auch nur eine bestimmte Anzahl von Stellen verarbeiten und speichern kann.
main.c
#include <stdio.h>
int main( void )
{ printf
( "%g\n", 3.1415926535897932 ); }stdout
3.14159
Das obige Beispielprogramm gibt nur sechs Stellen aus. Bei Bedarf kann die Zahl der ausgegebenen Stellen allerdings auch erhöht werden.
- Auswertung des Ausdrucks »"Hallo, Welt!"« mit nachfolgender Ausgabe des erhaltenen Wertes
Auswertung Ausgabe
"Hallo, Welt" ---------------------> Hallo, Welt ---------------------> Hallo, Welt
Ausdruck Wert Textdarstellung
Aufbau
- Aufbaudiagramm
Ziffernfolge
.---------------.
|-|--->| Dezimalziffer |---.------------------------.--->|-|
'---------------' ^ |
| .---------------. |
'---| Dezimalziffer |<---'
'---------------'
Punktnumerale .-. .--------------.
|-|--->.----------------------->( . )------->| Ziffernfolge |-------.--->|-|
| '-' '--------------' ^
| .--------------. .-. |
'--->| Ziffernfolge |--->( . )---.-----------------------.---'
'--------------' '-' | ^
| .--------------. |
'--->| Ziffernfolge |---'
'--------------'
Durch die hier vorgestellten Punktnumeralia wird die Bedeutung des Wortes „Numerale“ aus einer früheren Lektion nun erweitert: Sowohl die früher vorgestellten Numeralia als auch die in dieser Lektion neu vorgestellten Punktnumeralia sind Numeralia.
Semantik
Wert
Der Wert eines Punktnumerales ist zunächst der Wert, den solche ein Numerale auch im Alltag hat, nachdem der Punkt durch eine Komma ersetzt und eine Null ergänzt wurde, um zu verhindern, daß das Numerale direkt mit dem Komma beginnt oder endet. Beispielsweise ist der Wert des Punktnumerales »12.2« gleich 12,2. Allerdings gilt dies nur näherungsweise, da nicht alle Werte mit Nachkommastellen genau dargestellt werden können. Die Abweichungen vom richtigen Wert sind aber meist so klein, daß sie nicht weiter stören.
- Numerale und Wert
Numerale Wert
1. 1,0
2.3 2,3
4.56 4,56
Literale
Ein Oberbegriff für ganzzahlige Numeralia und Punktnumeralia ist „Numerale“ (numerisches Literal).
Ein Oberbegriff für Numeralia und Zeichenfolgenliterale ist „Literal“.
Ein Literal dient der Angabe eines Wertes.
Ein Literal ist eine Art von Ausdruck. Später werden wir auch noch Ausdrücke kennenlernen, die keine Literale sind, aber ebenfalls einen Wert angeben.
- Literale
Numerale
.-----------------------.
---.--->| ganzzahliges Numerale |---.--->
| '-----------------------' |
| .-----------------------. |
'--->| Punktnumerale |---'
'-----------------------'Literal
.----------------------.
---.--->| Zeichenfolgenliteral |---.--->
| '----------------------' |
| .----------------------. |
'--->| Numerale |---'
'----------------------'Ausdruck
.---------.
--->| Literal |--->
'---------'
Übungsfragen
? Übungsfrage
Ist der Wert des Numerales »22.0« gleich dem Wert des Numerales »22.00«?
? Übungsfrage
Ist das Numerale »22.0« gleich dem Numerale »22.00«?