Einen engen Formatvertrag und einen passenden Rückgabetyp wählen.
Das Preisfeld unseres Lehrbeispiels verlangt einen String mit genau zwei Nachkommastellen. Ein getrenntes Formatfeld wählt de-DE oder en-US; Währung steht ebenfalls separat. 1.234,50 und 1,234.50 können so denselben Wert bezeichnen. Ohne Formatvertrag ist 1,234 mehrdeutig; unter unserem Zwei-Stellen-Vertrag ist es ungültig. Entferne keine beliebigen Buchstaben: Aus abc12 würde sonst ein scheinbar gültiger Preis. Prüfe Eingangstyp, vollständige Zeichenfolge, Vorzeichen und erlaubten Bereich. Bewahre den Wert als Decimal aus einer validierten Zeichenfolge oder als ganze Untereinheiten. Eine nachträgliche float-Rückgabe kann die Zusage exakter Dezimaldarstellung verlieren. Auch Decimal kennt NaN und Infinity; sie sind nach unserem Vertrag keine Preise.
Ein Beispiel
Eine kleine Testtabelle enthält 1.234,50/de-DE→1234.50, 1,234.50/en-US→1234.50, 1,234/de-DE→invalid, abc12→invalid, leer→invalid, True→invalid, -2,00→invalid und NaN→invalid. Die Ablehnung negativer Preise ist eine bewusst gewählte Regel dieses Katalogs; ein anderer Vertrag könnte Gutschriften zulassen. Der Code zeigt nur den bereits normalisierten Wert, keinen universellen Locale-Parser.
Python 3.11 · Lehrbeispiel
from decimal import Decimal
price = Decimal("12.30")
assert price.is_finite()
print(price + Decimal("0.20"))
Erwartete Ausgabe
12.50