[Python-de] BCD in Python

Frank Mueller frank at mweb.de
Mit Nov 26 13:16:54 CET 2003


Hi,

nach einiger Zeit des Mitlesens heute auch mal mein erstes Statement.

> Was tun?
> Nicht in Euro-Komma-irgendwas rechnen sondern in Cent
> Komma Null. Bzw. bei der Tankstelle in 1/10 Cent und
> bei der Bank mit 1/100 oder 1/1000 Komma-Null rechnen
> und erst zum Schluss zurück rechnen. Aber so bald eine
> Kommerzahlen dabei ist, kann das Ergebnis abweichen.

Dieser Weg hat weiterhin seine Schwäche, denn er rundet nicht richtig und
verlagert die Problematik auch nur weiter nach hinten. Bei einer
entsprechenden Anzahl finanzieller Transaktionen kann dies dennoch
einträglich genug sein. Storries über die Ausnutzung dieses Problems gibt
es hinreichend. *g*

Die genaue Problematik hat Mike Cowlishaw, seines Zeichens IBM Fellow und
Entwickler von ReXX sehr schön unter

http://www2.hursley.ibm.com/decimal/decifaq.html

erläutert. Typischerweise nutzt man zur Lösung binär codierte
Dezimalzahlen, kurz BCD. Java unterstützt dies z.B. durch die Klasse
BigDecimal. Diese Konstrukte sind natürlich nicht so schnell wie Floating
Points via CPU, aber halt präzise.

Für Python gibt es, eine Google-Recherche sei Dank, auch eine Lösung unter

http://fixedpoint.sourceforge.net/

Diese Bibliothek ermöglicht Python eine präzise Festkomma-Arithmetik.
Allerdings habe ich sie selbst noch nicht auspobiert.

mue

-- 
**
** Frank Mueller / Oldenburg / Germany
**
** frank at mweb.de    http://www.mweb.de
**