8 pontos por GN⁺ 2024-10-09 | 1 comentários | Compartilhar no WhatsApp
  • Manipular valores monetários é uma tarefa comum na computação, mas as linguagens de programação convencionais não têm um tipo de dado nativo para representar quantias em dinheiro
  • Isso pode causar problemas de arredondamento em tarefas como pagamento parcelado, câmbio, processamento de taxas e cobrança de impostos
  • Money é uma biblioteca Kotlin que ajuda a facilitar o cálculo e a alocação de valores monetários
    • Suporta operações matemáticas com valores monetários, cálculo de porcentagens e alocação, permitindo modelar diversos casos de uso
    • Também oferece suporte nativo a criptomoedas
  • Funcionalidade de alocação
    • Uma das maiores vantagens da biblioteca é o recurso de alocação
    • Ele divide um valor em várias partes garantindo que a soma continue igual ao valor original
    • Por exemplo, quando um cliente paga uma compra de USD 100.00 em três parcelas, é possível evitar perdas causadas por problemas de arredondamento
  • Como fazer a alocação
    • Use o método allocate() para garantir que o resultado não tenha diferença em relação ao valor original.
    • Para alocar de acordo com proporções, passe uma lista de valores Percentage.
    • Por padrão, a biblioteca distribui automaticamente a diferença, mas isso pode ser ajustado com a estratégia de alocação desejada.
  • Encerrando
    • Este texto é uma apresentação breve das funcionalidades da biblioteca.
    • O plano é manter a API enxuta e expandir gradualmente o suporte ao desenvolvimento Android, além de recursos de persistência e serialização.
    • Espera-se que a versão atual seja útil para quem manipula valores monetários em projetos Kotlin.

Resumo do GN⁺

  • Lidar com dinheiro é uma tarefa comum em programação, mas pode se tornar complexo por causa de problemas de arredondamento.
  • A biblioteca Money foi projetada para resolver esses problemas em Kotlin, oferecendo suporte a cálculo e alocação precisa de valores monetários.
  • A biblioteca oferece suporte a 306 moedas e 2283 criptomoedas, sendo útil para lidar com dinheiro em projetos Kotlin.
  • Outros projetos com funcionalidades semelhantes incluem a biblioteca Joda-Money do Java.

1 comentários

 
GN⁺ 2024-10-09
Comentários no Hacker News
  • o uso de função infix parece um pouco estranho

    • ao projetar APIs em Kotlin, parece mais natural usar funções de extensão ou propriedades de extensão comuns
    • fico curioso por que não fizeram overload de plus e minus em vez de usar "increaseBy" e "decreaseBy"
  • parabéns pela biblioteca e obrigado por compartilhar

    • o sistema de unidades de F# ou C# pode ser parecido com cálculos monetários
    • estou desenvolvendo um backtester com foco em precisão em Rust, e os ativos são avaliados em moeda
    • fico curioso se, durante a simulação, dá para assumir que a bolsa está sempre operando
    • fico curioso se existe dado público sobre taxas de câmbio
    • fico curioso sobre qual taxa de câmbio deve ser escolhida ao negociar
    • fico curioso se existe uma melhor prática para arredondamento
    • fico curioso se é melhor deduzir impostos imediatamente
    • estou pensando se devo modelar a inflação; por enquanto pretendo ignorá-la e ajustar no final
  • isso lembra a usabilidade do tipo monetário do Rebol

    • o sistema de tipos do Rebol era muito expressivo
    • seria ótimo ver mais bibliotecas oferecendo esse tipo de experiência
  • perguntas sobre edge cases que surgem ao lidar com dinheiro

    • eu esperaria uma exceção em tempo de execução ao somar valores de moedas diferentes
    • fico curioso se é possível especificar a regra de arredondamento ao dividir $2.00 por 3
    • fico curioso sobre como são tratadas casas decimais extras ao fazer parse da entrada do usuário
    • fico curioso sobre como a biblioteca lida com casos fora das regras de casas decimais
  • gosto do suporte a moedas personalizadas

    • é preciso cuidado, porque o símbolo da moeda varia conforme a localidade
    • o conjunto de dados CLDR é usado na maioria das implementações que lidam com exibição de moeda
  • é estranho que linguagens de planilha não deem um bom suporte a dinheiro

    • automação com planilhas é boa, e é possível obter resultados surpreendentes em linguagens que tratam tipos com seriedade
  • o tipo decimal do C# é adequado para cálculos monetários

  • aprendi muito com os comentários, e isso vai ajudar na próxima iteração da biblioteca

  • mais do que a biblioteca, eu gostaria de uma suíte de testes abrangente que cobrisse todos os edge cases

    • tenho pensado no uso de tipos estritos
    • acho estranho que muitas linguagens de programação de baixo nível ainda usem uint64, size_t etc.
  • parece atender a todos os requisitos, e há uma boa discussão sobre as principais dificuldades do tratamento de dinheiro