Nachkommastellen in C (Nachkommastellen in C), Lektion, Seite 722905
https://www.purl.org/stefan_ram/pub/nachkommastellen_c (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
C-Kurs

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«?

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram722905 stefan_ram:722905 Nachkommastellen in C Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd722905, slrprddef722905, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/nachkommastellen_c