Blog

Wie Boring Expenses Geld speichert (und warum als Ganzzahl)

  • Technik
  • iOS
  • Swift

Hier ist ein klassischer Weg, einen Cent zu verlieren. Frag fast jede Programmiersprache, was 0.1 + 0.2 ergibt, und sie antwortet 0.30000000000000004. Das ist kein Fehler der Sprache – so funktionieren binäre Gleitkommazahlen. Sie können die meisten Dezimalbrüche nicht exakt darstellen, also schleichen sich winzige Fehler ein. Für Physik in Ordnung, für Geld nicht.

Für eine Finanz-App ist „ungefähr richtig“ die falsche Antwort. Deshalb speichert Boring Expenses einen Betrag nie als Dezimalzahl.

Die kleinste Einheit als ganze Zahl speichern

Der Trick, den Finanzsoftware seit jeher nutzt: in der kleinsten Einheit rechnen und sie als Ganzzahl halten. Statt 4,20 € speicherst du 420 – die Anzahl der Cent. Ganzzahlen sind exakt. Addieren, subtrahieren und summieren den ganzen Tag, und es sammelt sich nie Rundungsstaub an.

Boring Expenses geht noch einen Schritt weiter und speichert Beträge in sehr feinen Untereinheiten (denk an „100 Millionen pro ganzer Einheit“). Das lässt viel Spielraum für Währungen und künftige Anforderungen und hält trotzdem alles als schlichtes Int. Die Umrechnung in das, was du auf dem Bildschirm siehst, passiert ganz am Rand – wenn du einen Betrag eintippst und wenn wir ihn zur Anzeige formatieren.

// Zur Veranschaulichung, nicht der exakte Code:
let display = Decimal(amountInSubunits) / Decimal(subunitsPerUnit)
let text = display.formatted(.currency(code: userCurrency))

Warum das für dich zählt

Es ist eine kleine, unspektakuläre Entscheidung – genau die Sorte, die wir mögen. Du wirst sie nie sehen, und das ist der Punkt: Die Zahlen gehen einfach auf.