8 points par GN⁺ 2024-10-09 | 1 commentaires | Partager sur WhatsApp
  • La manipulation de montants monétaires est une tâche courante en informatique, mais les principaux langages de programmation ne disposent pas d’un type de données natif pour représenter les montants
  • Cela peut provoquer des problèmes d’arrondi dans des opérations comme le paiement en plusieurs fois, le change, le traitement des frais et la collecte des taxes
  • Money est une bibliothèque Kotlin conçue pour faciliter le calcul et l’allocation de montants
    • Elle prend en charge les opérations mathématiques sur les montants, le calcul de pourcentages et l’allocation, ce qui permet de modéliser divers cas d’usage
    • Elle prend aussi en charge les cryptomonnaies par défaut
  • Fonction d’allocation
    • L’un des plus grands atouts de la bibliothèque est sa fonction d’allocation
    • Elle permet de répartir un montant en plusieurs parts tout en garantissant l’égalité avec le montant d’origine
    • Par exemple, lorsqu’un client règle un achat de 100,00 USD en trois échéances, cela permet d’éviter les pertes dues aux problèmes d’arrondi
  • Méthode d’allocation
    • La méthode allocate() garantit un résultat sans écart par rapport au montant initial.
    • Pour allouer selon des proportions, il faut passer une liste de valeurs Percentage.
    • Par défaut, la bibliothèque répartit automatiquement la différence, mais cela peut être ajusté avec la stratégie d’allocation souhaitée.
  • Conclusion
    • Cet article ne fait qu’introduire brièvement les fonctionnalités de la bibliothèque.
    • L’objectif est de conserver une API concise tout en étendant progressivement la prise en charge du développement Android ainsi que les fonctions de persistance et de sérialisation.
    • Espérons que la version actuelle sera utile à celles et ceux qui manipulent des montants dans des projets Kotlin.

Récapitulatif de GN⁺

  • Gérer des montants est une tâche fréquente en programmation, mais elle peut devenir complexe à cause des problèmes d’arrondi.
  • La bibliothèque Money est une bibliothèque Kotlin conçue pour résoudre ces problèmes, en prenant en charge l’allocation et le calcul précis des montants.
  • Cette bibliothèque prend en charge 306 devises et 2 283 cryptomonnaies, ce qui la rend utile pour manipuler des montants dans des projets Kotlin.
  • Parmi les autres projets aux fonctionnalités similaires, on peut citer la bibliothèque Java Joda-Money.

1 commentaires

 
GN⁺ 2024-10-09
Avis Hacker News
  • l’utilisation des fonctions infix semble un peu étrange

    • pour concevoir une API en Kotlin, on s’attendrait plutôt à utiliser des fonctions d’extension ou des propriétés d’extension classiques
    • on se demande pourquoi plus et minus n’ont pas été surchargés à la place de "increaseBy" et "decreaseBy"
  • félicitations pour la bibliothèque et merci de l’avoir partagée

    • le système d’unités de F# ou de C# peut être similaire au calcul monétaire
    • développement en cours d’un backtester axé sur l’exactitude en Rust, avec des actifs évalués en devises
    • question sur la possibilité de supposer qu’une place d’échange fonctionne toujours pendant la simulation
    • question sur l’existence de données publiques sur les taux de change
    • question sur le taux de change à choisir lors d’une transaction
    • question sur la meilleure méthode pour l’arrondi
    • question sur l’intérêt de déduire immédiatement les taxes
    • réflexion sur la modélisation de l’inflation, pour l’instant ignorée avec un ajustement prévu à la fin
  • cela rappelle l’ergonomie du type monétaire de Rebol

    • le système de types de Rebol était très expressif
    • souhait de voir davantage de bibliothèques offrir ce type d’expérience
  • questions sur les cas limites qui apparaissent lors du traitement de montants

    • on s’attend à une exception d’exécution lors de l’addition de valeurs dans des devises différentes
    • question sur la possibilité de spécifier une règle d’arrondi quand on divise 2,00 $ par 3
    • question sur le traitement des chiffres supplémentaires lors de l’analyse des entrées utilisateur
    • question sur la manière dont la bibliothèque traite les cas qui sortent des règles de précision
  • appréciation du support des devises personnalisées

    • il faut faire attention, car les symboles monétaires varient selon les régions
    • le jeu de données CLDR est utilisé dans la plupart des implémentations qui gèrent l’affichage des devises
  • il est étrange que les langages de tableur gèrent mal l’argent

    • l’automatisation via les tableurs est utile, et on peut obtenir des résultats surprenants avec des langages qui prennent les types au sérieux
  • le type decimal de C# convient bien au calcul monétaire

  • beaucoup appris dans les commentaires, et cela aidera pour la prochaine itération de la bibliothèque

  • plutôt qu’une bibliothèque, souhait d’avoir une suite de tests approfondie couvrant tous les cas limites

    • réflexion sur l’usage de types stricts
    • il semble étrange que beaucoup de langages de programmation bas niveau utilisent encore uint64, size_t, etc.
  • cela semble répondre à toutes les exigences, avec une bonne discussion des principales difficultés du traitement monétaire