8 Punkte von GN⁺ 2024-10-09 | 1 Kommentare | Auf WhatsApp teilen
  • Die Verarbeitung von Geldbeträgen ist eine gängige Rechenaufgabe, doch in den gängigen Programmiersprachen gibt es keinen eingebauten Datentyp zur Darstellung von Geldbeträgen
  • Das kann bei Aufgaben wie Ratenzahlungen, Devisengeschäften, Gebührenverarbeitung und Steuereinzug zu Rundungsproblemen führen
  • Money ist eine Kotlin-Bibliothek, die Berechnungen und Aufteilungen von Geldbeträgen erleichtern soll
    • Sie unterstützt mathematische Operationen auf Geldbeträgen, Prozentberechnungen und Aufteilungen und kann so verschiedene Anwendungsfälle modellieren
    • Kryptowährungen werden ebenfalls standardmäßig unterstützt
  • Aufteilungsfunktion
    • Eine der größten Stärken der Bibliothek ist ihre Aufteilungsfunktion
    • Sie teilt einen Geldbetrag in mehrere Teile auf und stellt dabei sicher, dass die Summe weiterhin exakt dem ursprünglichen Betrag entspricht
    • Wenn ein Kunde zum Beispiel einen Kauf über USD 100.00 in drei Raten bezahlt, lassen sich Verluste durch Rundungsprobleme vermeiden
  • Methoden der Aufteilung
    • Mit der Methode allocate() wird sichergestellt, dass das Ergebnis nicht vom ursprünglichen Betrag abweicht.
    • Für eine Aufteilung nach Anteilen wird eine Liste von Percentage-Werten übergeben.
    • Standardmäßig verteilt die Bibliothek Differenzen automatisch, dies kann jedoch mit einer gewünschten Verteilungsstrategie angepasst werden.
  • Zum Abschluss
    • Dieser Beitrag gibt nur eine kurze Einführung in die Funktionen der Bibliothek.
    • Geplant ist, die API kompakt zu halten und die Unterstützung für Android-Entwicklung sowie Persistenz- und Serialisierungsfunktionen schrittweise auszubauen.
    • Die aktuelle Version soll für alle nützlich sein, die in Kotlin-Projekten mit Geldbeträgen arbeiten.

Zusammenfassung von GN⁺

  • Der Umgang mit Geldbeträgen ist in der Programmierung eine häufige Aufgabe, kann aber durch Rundungsprobleme komplex werden.
  • Die Money-Bibliothek ist eine Kotlin-Bibliothek, die zur Lösung dieser Probleme entwickelt wurde und eine präzise Aufteilung und Berechnung von Geldbeträgen unterstützt.
  • Die Bibliothek unterstützt 306 Währungen und 2283 Kryptowährungen und ist nützlich für den Umgang mit Geldbeträgen in Kotlin-Projekten.
  • Ein anderes Projekt mit ähnlichen Funktionen ist zum Beispiel Javas Bibliothek Joda-Money.

1 Kommentare

 
GN⁺ 2024-10-09
Hacker-News-Kommentare
  • Die Verwendung von Infix-Funktionen wirkt etwas seltsam

    • Bei der Gestaltung einer API in Kotlin würde man wohl eher gewöhnliche Erweiterungsfunktionen oder Erweiterungseigenschaften verwenden
    • Ich frage mich, warum statt increaseBy und decreaseBy nicht plus und minus überladen wurden
  • Glückwunsch zur Bibliothek und danke fürs Teilen

    • Das Einheitensystem in F# oder C# könnte Geldberechnungen ähneln
    • Ich entwickle in Rust einen Backtester mit Fokus auf Korrektheit, bei dem Assets in Währungen bewertet werden
    • Ich frage mich, ob man bei Simulationen annehmen kann, dass Börsen immer verfügbar sind
    • Ich frage mich, ob es öffentliche Daten zu Wechselkursen gibt
    • Ich frage mich, welchen Wechselkurs man bei Transaktionen wählen sollte
    • Ich frage mich, ob es einen Best Practice für Rundung gibt
    • Ich frage mich, ob es gut ist, Steuern sofort abzuziehen
    • Ich überlege, Inflation zu modellieren, ignoriere sie aktuell aber und plane, sie am Ende anzupassen
  • Erinnert an die Benutzerfreundlichkeit des Geld-Typs in Rebol

    • Das Typsystem von Rebol war sehr ausdrucksstark
    • Ich hoffe, dass es mehr Bibliotheken geben wird, die so eine Erfahrung bieten
  • Fragen zu Edge Cases bei der Verarbeitung von Geld

    • Ich würde erwarten, dass beim Addieren von Werten unterschiedlicher Währungen eine Laufzeitausnahme auftritt
    • Ich frage mich, ob man beim Teilen von $2.00 durch 3 Rundungsregeln angeben kann
    • Ich frage mich, wie bei der Verarbeitung von Benutzereingaben mit zusätzlichen Nachkommastellen umgegangen wird
    • Ich frage mich, wie die Bibliothek Fälle behandelt, die gegen Stellenregeln verstoßen
  • Ich mag die Unterstützung für benutzerdefinierte Währungen

    • Da Währungssymbole je nach Region unterschiedlich sind, ist Vorsicht geboten
    • Der CLDR-Datensatz wird in den meisten Implementierungen verwendet, die die Darstellung von Währungen behandeln
  • Es ist seltsam, dass Tabellenkalkulationssprachen Geld nicht gut unterstützen

    • Automatisierung mit Tabellenkalkulationen ist gut, und in Sprachen, die Typen ernst nehmen, kann man erstaunliche Ergebnisse erzielen
  • Der decimal-Typ in C# eignet sich gut für Geldberechnungen

  • Ich habe in den Kommentaren viel gelernt, und das wird bei der nächsten Iteration der Bibliothek helfen

  • Statt der Bibliothek hätte ich lieber eine gründliche Testsuite, die alle Edge Cases abdeckt

    • Ich habe Gedanken zur Verwendung strenger Typen
    • Es fühlt sich seltsam an, dass viele Low-Level-Programmiersprachen immer noch uint64, size_t usw. verwenden
  • Scheint alle Anforderungen zu erfüllen, und es gibt eine gute Diskussion über die größten Schwierigkeiten bei der Verarbeitung von Geld