Zum Inhalt springen

Typen & Geld

In FinDSL stecken Einheit und Präzision im Typsystem. Euro und Cent sind verschiedene Typen — Rundung ist nie ein versehentlicher Nebeneffekt, sondern eine bewusste, sichtbare Operation.

TypBedeutungEinheit
Euroganzzahliger Eurobetrag1 Euro
Centganzzahliger Centbetrag1 Cent
EuroCentEurobetrag mit zwei Nachkommastellen1 Euro (mit Cent)

Geldwerte werden intern als beliebig präzise Dezimalzahlen geführt — kein Rundungsverlust durch Gleitkomma-Arithmetik.

konst GRUNDFREIBETRAG: Euro = 12.348
konst KINDERGELD_MONAT: EuroCent = 250,00

Prozent ist ein eigener Typ. Multipliziert mit Geld ergibt sich EuroCent (volle Präzision), das man anschließend bewusst rundet:

konst KST_SATZ: Prozent = 15%
@Quelle("§ 23 Absatz 1 KStG")
fn Koerperschaftsteuer(einkommen: Euro): Euro =
(KST_SATZ * einkommen).abrunden()
  • Ganzzahl — vorzeichenbehaftete Ganzzahl, beliebig groß.
  • Dezimal — Festkommazahl mit hoher Präzision (für Zwischenrechnungen, z. B. Tarifformeln).

Die Umwandlung von höherer zu niedrigerer Präzision (EuroCent → Euro/Cent, Dezimal → Ganzzahl) passiert nur über die Methoden .abrunden() und .aufrunden(). Die Zieleinheit ergibt sich aus dem Kontext — dem Rückgabetyp, einer Annotation oder einem als-Cast:

// Ziel Euro ergibt sich aus dem Rückgabetyp:
fn Beispiel(betrag: EuroCent): Euro = betrag.abrunden()
// "je angefangene Einheit" → aufrunden:
@Quelle("§ 9 Absatz 1 KraftStG")
fn AngefangeneEinheiten(hubraum: Dezimal): Ganzzahl =
hubraum.aufrunden()

Die Gegenrichtung (mehr Präzision) geschieht implizit und verlustfrei: Euro → EuroCent → Cent.

Die vollständige Arithmetik-Tabelle (welche Operation welchen Typ ergibt) steht in der Sprachreferenz.