Die aufrufbare Klasse ›Decimal‹ in Python (Die aufrufbare Klasse Decimal in Python), Lektion, Seite 723954
https://www.purl.org/stefan_ram/pub/decimal_python (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
Python-Kurs

Die aufrufbare Klasse ›Decimal‹ in Python 

Das aufrufbare Objekt ›Decimal‹ wandelt den Argumentwert in den Typ »Decimal«. Der Wert eines Aufrufs dieses Objekts hat stets die Klasse »Decimal« als Typ.

Dieser Typ verwendet eine dezimale Darstellung  für seine Werte, die auch Nachkommastellen  umfassen können, und erlaubt eine hohe Rechengenauigkeit.

Die Python -Implementation erweckt normalerweise den Eindruck als könne sie den Wert „0,1“ (ein Zehntel) intern genau darstellen.

Protokoll
0.1
0.1

Da jener Wert für einen Menschen relativ gut beherrschbar ist, besteht kein Grund daran zu zweifeln, daß auch eine Python -Implementation mit ihm umgehen kann. Tatsächlich speichert die Python -Implementation jenen Wert zur Beschleunigung der Verarbeitung normalerweise im Dualsystem mit einer beschränkten Anzahl von Bits; dabei kann er dann jedoch nur näherungsweise  dargestellt werden. Durch kleine Rundungen bei der Ausgabe wird der Wert dann wieder mit dem Text »0.1« dargestellt, so daß die kleine Ungenauigkeit nicht bemerkt wird.

Bei einer Wandlung in den Typ »Decimal« wird jedoch der Wert erkennbar, der tatsächlich zu internen Darstellung des Wertes des Numerales »0.1« verwendet wird.

Protokoll

from decimal import Decimal

Decimal( 0.1 )

Decimal('0.1000000000000000055511151231257827021181583404541015625')

Für die Ausgabe der Werte des Typs »Decimal« wird ein Verfahren verwendet, das den Wert ganz genau im Zehnersystem darstellt. Dadurch wird es sichtbar, daß der Wert von »0.1« nicht genau ein Zehntel ist.

Auswertung
type( Decimal( 0.1 ))
<class 'decimal.Decimal'>

Um einen Wert zu erhalten, der genau ein Zehntel ist, muß »0.1« als Zeichenfolge  angegeben werden.

Auswertung
print( Decimal( '0.1' ))
0.1

float-Rechnungen zeigen manchmal Abweichungen von den Ergebnissen, die eine manuelle Berechnung ergibt.

Auswertung
0.1 + 0.2
0.30000000000000004
Auswertung
0.1 + 0.2 - 0.3
5.551115123125783e-17

Die Ergebnisse von Decimal-Rechnungen liefern in der Regel Ergebnisse, die auch eine manuelle Berechnung ergeben würde.

Protokoll
print( Decimal( '0.1' )+ Decimal( '0.2' ))
0.3
Auswertung
print( Decimal( '0.1' )+ Decimal( '0.2' )- Decimal( '0.3' ))
0.0

Ein Decimal-Wert kann mit dem Objekt »(float)« in einen float-Wert gewandelt werden.

Auswertung
float( Decimal( '0.1' )+ Decimal( '0.2' )- Decimal( '0.3' ))
0.0

Die Genauigkeit des Datentyps »Decimal« geht noch über die von »float« hinaus.

Auswertung
1/7
0.14285714285714285
Auswertung
print( Decimal( '1' )/ Decimal( '7' ))
0.1428571428571428571428571429

Die Genauigkeit von Rechnungen mit Werten des Datentyps »Decimal« kann vom Programmierer noch im Detail festgelegt werden. Die Details sollen aber an dieser Stelle des Kurses nicht behandelt werden.

Die Darstellung von Decimal-Werten

Um einen Decimal-Wert so darzustellen, daß die Auswertung der Darstellung wieder einen dem ursprünglichen Decimal-Wert gleichwertigen Wert ergibt, verwendet ›repr‹ eine Schreibweise mit dem Namen »Decimal« als Prälaten.

Protokoll

from decimal import Decimal

print( str( Decimal( '0.1' )))

0.1
Protokoll

from decimal import Decimal

print( repr( Decimal( '0.1' )))

Decimal('0.1')

 

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 stefanram723954 stefan_ram:723954 Die aufrufbare Klasse Decimal in Python Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd723954, slrprddef723954, 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/decimal_python