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.
Geldtypen
Abschnitt betitelt „Geldtypen“| Typ | Bedeutung | Einheit |
|---|---|---|
Euro | ganzzahliger Eurobetrag | 1 Euro |
Cent | ganzzahliger Centbetrag | 1 Cent |
EuroCent | Eurobetrag mit zwei Nachkommastellen | 1 Euro (mit Cent) |
Geldwerte werden intern als beliebig präzise Dezimalzahlen geführt — kein Rundungsverlust durch Gleitkomma-Arithmetik.
konst GRUNDFREIBETRAG: Euro = 12.348konst KINDERGELD_MONAT: EuroCent = 250,00Prozent
Abschnitt betitelt „Prozent“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()Zahltypen
Abschnitt betitelt „Zahltypen“Ganzzahl— vorzeichenbehaftete Ganzzahl, beliebig groß.Dezimal— Festkommazahl mit hoher Präzision (für Zwischenrechnungen, z. B. Tarifformeln).
Rundung ist explizit
Abschnitt betitelt „Rundung ist explizit“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.