8 puntos por GN⁺ 2024-10-09 | 1 comentarios | Compartir por WhatsApp
  • Manipular montos monetarios es una tarea común en la computación, pero los lenguajes de programación convencionales no tienen un tipo de dato básico para representar montos de dinero
  • Esto puede provocar problemas de redondeo en tareas como pagos a plazos, operaciones de cambio, procesamiento de comisiones y recaudación de impuestos
  • Money es una biblioteca de Kotlin que ayuda a facilitar el cálculo y la asignación de montos de dinero
    • Permite modelar varios casos de uso al admitir operaciones matemáticas sobre montos, cálculo de porcentajes y asignación
    • También admite criptomonedas de forma predeterminada
  • Función de asignación
    • Una de las mayores ventajas de la biblioteca es su función de asignación
    • Garantiza que, al dividir un monto en varias partes, el total siga siendo igual al monto original
    • Por ejemplo, cuando un cliente paga una compra de USD 100.00 en tres cuotas, se puede evitar la pérdida causada por problemas de redondeo
  • Método de asignación
    • Usa el método allocate() para garantizar que el resultado no difiera del monto original.
    • Para asignar según una proporción, se pasa una lista de valores Percentage.
    • De forma predeterminada, la biblioteca asigna automáticamente la diferencia, pero se puede ajustar con la estrategia de asignación que se desee.
  • Cierre
    • Este artículo es una introducción breve a las funciones de la biblioteca.
    • El plan es mantener la API concisa y ampliar gradualmente el soporte para desarrollo Android, además de funciones de persistencia y serialización.
    • Esperan que la versión actual sea útil para quienes manipulan montos de dinero en proyectos Kotlin.

Resumen de GN⁺

  • Manejar montos de dinero es una tarea común en programación, pero puede volverse compleja por los problemas de redondeo.
  • La biblioteca Money fue diseñada para resolver estos problemas y admite asignación y cálculo precisos de montos monetarios.
  • Esta biblioteca admite 306 monedas y 2283 criptomonedas, por lo que es útil para manejar dinero en proyectos Kotlin.
  • Otros proyectos con funciones similares incluyen la biblioteca Joda-Money de Java.

1 comentarios

 
GN⁺ 2024-10-09
Opiniones en Hacker News
  • El uso de funciones infix se siente un poco extraño

    • Al diseñar una API en Kotlin, parecería más natural usar funciones de extensión o propiedades de extensión comunes
    • Me pregunto por qué no sobrecargaron plus y minus en lugar de "increaseBy" y "decreaseBy"
  • Felicitaciones por la librería y gracias por compartirla

    • El sistema de unidades de F# o C# podría ser similar a los cálculos monetarios
    • Estoy desarrollando en Rust un backtester enfocado en la precisión, y los activos están valuados en moneda
    • Me pregunto si en una simulación se puede asumir que el mercado siempre está funcionando
    • Me pregunto si hay datos públicos sobre tipos de cambio
    • Me pregunto qué tipo de cambio se debería elegir al operar
    • Me pregunto si existe una mejor práctica para el redondeo
    • Me pregunto si conviene deducir los impuestos de inmediato
    • Estoy pensando si modelar la inflación; por ahora planeo ignorarla y ajustar al final
  • Me recuerda la usabilidad del tipo de dinero de Rebol

    • El sistema de tipos de Rebol era muy expresivo
    • Ojalá hubiera más librerías que ofrecieran una experiencia así
  • Preguntas sobre casos límite que aparecen al manejar dinero

    • Esperaría una excepción en tiempo de ejecución al sumar valores de distintas monedas
    • Me pregunto si se puede especificar una regla de redondeo al dividir $2.00 entre 3
    • Me pregunto cómo se manejan los dígitos adicionales al parsear entrada del usuario
    • Me pregunto cómo trata la librería los casos que se salen de las reglas de cantidad de decimales
  • Me gusta que soporte monedas personalizadas

    • Hay que tener cuidado porque los símbolos monetarios varían según la región
    • El conjunto de datos CLDR se usa en la mayoría de las implementaciones que manejan la presentación de monedas
  • Es extraño que los lenguajes de hojas de cálculo no den buen soporte al dinero

    • La automatización con hojas de cálculo es buena, y en lenguajes que se toman en serio los tipos se pueden lograr resultados sorprendentes
  • El tipo decimal de C# es adecuado para cálculos monetarios

  • Aprendí mucho en los comentarios, y será útil para la siguiente iteración de la librería

  • Más que la librería, quisiera una suite de pruebas exhaustiva que cubra todos los casos límite

    • Tengo ideas sobre el uso de tipos estrictos
    • Se siente extraño que muchos lenguajes de programación de bajo nivel sigan usando uint64, size_t, etc.
  • Parece cumplir con todos los requisitos y hay una buena discusión sobre las principales dificultades del manejo de dinero