Nachkommastellen in C++
Nachkommastellen werden in Numeralia nicht etwa wie im Deutschen 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.0main.cpp
#include <iostream>
#include <ostream>
#include <string>using namespace ::std::literals;
int main() { ::std::cout << 12.0 << "\n"s; }
- Konsole
12
Eine Folge von Nullen, die ganz am Ende eines Numerales mit einem Punkt steht, trägt nicht zu seinem Wert bei.
Die Zahl «12.0» kann daher sowohl als »12.0« als auch als »12.00« geschrieben werden.
main.cpp
#include <iostream>
#include <ostream>
#include <string>using namespace ::std::literals;
int main() { ::std::cout << 12.00 << "\n"s; }
- Konsole
12
main.cpp
#include <iostream>
#include <ostream>
#include <string>using namespace ::std::literals;
int main() { ::std::cout << 12.0 << "\n"s; }
- Konsole
12
Der Text »12.00« kann mit einem Zeichenfolgenliteral ausgegeben werden.
main.cpp
#include <iostream>
#include <ostream>
#include <string>using namespace ::std::literals;
int main() { ::std::cout << "12.00"s << "\n"s; }
- Konsole
12.00
Nullen am Ende dürfen auch ganz weggelassen werden, so daß für die Zahl «12.0» auch die Schreibweise »12.« erlaubt ist.
main.cpp
#include <iostream>
#include <ostream>
#include <string>using namespace ::std::literals;
int main() { ::std::cout << 12. << "\n"s; }
- Konsole
12
Stehen vor dem Punkt nur Nullen, dürfen diese ebenfalls weggelassen werden, so daß für die Zahl «0.12» auch die Schreibweise ».12« erlaubt ist.
main.cpp
#include <iostream>
#include <ostream>
#include <string>using namespace ::std::literals;
int main() { ::std::cout << .12 << "\n"s; }
- Konsole
0.12
Bei einem Numerale mit einem Punkt sind aber im Gegensatz zu einem ganzzahligen Numerale auch Nullen am Anfang erlaubt, ohne daß dies zu einer besonderen Interpretation führt.
main.cpp
#include <iostream>
#include <ostream>
#include <string>using namespace ::std::literals;
int main() { ::std::cout << 012. << "\n"s; }
- Konsole
12
Bei der Ausgabe eines Wertes mit Nachkommastellen wird dieser manchmal auf ein bestimmte Anzahl von Stellen abgeschnitten. Dies liegt daran, daß in der Regel zirka sechs Stellen für viele Zwecke bereits ausreichen. Intern kann C++ aber noch etwas mehr Stellen verarbeiten und speichern.
main.cpp
#include <iostream>
#include <ostream>
#include <string>using namespace ::std::literals;
int main() { ::std::cout << 3.1415926 << "\n"s; }
- Konsole
3.14159
Es folgt noch ein Beispiel für die Gliederung von Punktnumeralia mit Apostrophen. (Hier finden sich aber mehr Stellen als von C++ -Implementationen üblicherweise berücksichtigt.)
main.cpp
#include <iostream>
#include <ostream>
#include <string>using namespace ::std::literals;
int main() { ::std::cout << 3.141'5926'535'89793'238'462'643'383'27950'288'41971'693'993'7510 << "\n"s; }
- Konsole
3.14159
Wir können nun auch zwischen ganzzahligen Numeralia (wie »32767« oder »22«) ohne Punkt und Punktnumeralia (wie »12.0 oder »12.00«) mit einem Punkt unterscheiden.
Aufbau
Das folgende Diagramm beschreibt den Aufbau eines Punktnumerales.
- 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.
Wert
Der Wert eines Punktnumerales ist zunächst der Wert, den solche ein Numerale auch im Alltag hat, nachdem alle enthaltenen Grundstriche entfernt, 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 »1'2.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
1.0 1,0
1.00 1,0
1'2.2 12,2
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.
Alle Literale sind Ausdrücke.
- Literale (Aufbaudiagramm)
Literal
.----------------------.
|-|--->.--->| Zeichenfolgenliteral |---.--->|-|
| '----------------------' ^
| .----------------------. |
'--->| Numerale |---'
| '----------------------' ^
| .----------------------. |
'--->| Punktnumerale |---'
'----------------------'Ausdruck
.---------.
|-|--->| Literal |--->|-|
'---------'- Literale (Baumdiagramm)
Ausdruck
^
|
Literal
^
|
.------------------'------------------.
| |
Numerale Zeichenfolgenliteral
^ z.B.: "abc"s
|
.------------------'------------------.
| |
ganzzahliges Numerale Punktnumerale
z.B.: 123 z.B.: 1.23
Übungsfragen
- ? =
- Ist der Zahlenwert des Numerales »22.0« gleich dem Zahlenwert des Numerales »22.00«?
- ? =
- Ist das Numerale »22.0« gleich dem Numerale »22.00«?
Werte und ihre Textdarstellung ⃗
Der Ausdruckrahmen gibt Textdarstellungen von Werten, nicht die Werte selber aus.
Wir sprechen von der „Ausgabe einer Textdarstellung des Wertes «7» “, weil Werte im allgemeinen keine ausdruckbaren Zeichenfolgen sind. Eine ausgedruckte Zeichenfolge, wie »7«, ist also nicht ein Wert selber, sondern nur eine Darstellung des Wertes durch einen Text. Beispielsweise kann der Wert «12.0» auch als »12.00« dargestellt werden, beides sind zwei verschiedene Textdarstellungen desselben Wertes. Lesen oder Schreiben kann man nur Textdarstellungen von Werten, nicht die Werte selber.
Die Textdarstellung der Zeichenfolge des Zeichenfolgenliterals »"7"s« gleicht der Textdarstellung der Zahl »7«, obwohl intern beides verschiedene Werte sind.
main.cpp
#include <iostream>
#include <ostream>
#include <string>using namespace ::std::literals;
int main() { ::std::cout << "7"s << "\n"s; }
- Konsole
7
main.cpp
#include <iostream>
#include <ostream>
#include <string>using namespace ::std::literals;
int main() { ::std::cout << 7 << "\n"s; }
- Konsole
7
Man kann an der Ausgabe auch nicht erkennen, daß das Numerale in dem folgenden Programm mit einem Punkt geschrieben wurde.
main.cpp
#include <iostream>
#include <ostream>
#include <string>using namespace ::std::literals;
int main() { ::std::cout << 7.0 << "\n"s; }
- Konsole
7
Zur Vereinfachung kann man aber auch von der „Ausgabe eines Wertes “ sprechen, wenn man weiß, daß dabei nicht wirklich der Wert selber, sondern nur eine Textdarstellung des Wertes ausgegeben wird.