kipcole9/money

"NaN" intentionally a supported Money amount?

coladarci opened this issue · 2 comments

I was surprised to learn today that this works:

iex > Money.new(:USD, "NaN")
Money.new(:USD, "NaN")

I would sort of have expected an error similar to:

iex > Money.new(:USD, "greg")
{:error,
 {Money.InvalidAmountError, "Amount cannot be converted to a number: \"greg\""}}

We have some legacy data floating around that, it turns out have been persisting these due to bad data. We then tried to call Money.to_integer_exp(money) on one of them and that raises:

(We are on Money 5.10.0 at the moment so the stack trace doesn't line up w/ master)

ArithmeticError: bad argument in arithmetic expression
  Module "erlang", in :erlang.*/2
  File "lib/money.ex", line 1947, in Money.to_integer_exp/2

Curious your thoughts on this; we can figure out a work around on our end pretty easily so we aren't blocked here.

Thanks, again, for everything you do!

This is probably a sideeffect of the underlying Decimal library, which supports :NaN as well as :inf. Not sure if that's an intended sideeffect or not though.

@coladarci thanks for the report and definitely a bug (arises for the reasons @LostKobrakai noted). I have published ex_money version 5.12.2 with the following changelog entry:

Bug Fixes

  • Don't create "NaN" or "Inf" valued Money structs. Thanks for @coladarci for the report. Closes #143.