diff --git a/lib/money.ex b/lib/money.ex index 9172381..55e9a80 100644 --- a/lib/money.ex +++ b/lib/money.ex @@ -210,6 +210,15 @@ defmodule Money do defp prepare_parse_string(["9" | tail], delimiter, acc), do: prepare_parse_string(tail, delimiter, ["9" | acc]) + defp prepare_parse_string(["e" | tail], delimiter, acc), + do: prepare_parse_string(tail, delimiter, ["e" | acc]) + + defp prepare_parse_string(["E" | tail], delimiter, acc), + do: prepare_parse_string(tail, delimiter, ["e" | acc]) + + defp prepare_parse_string(["+" | tail], delimiter, acc), + do: prepare_parse_string(tail, delimiter, ["+" | acc]) + defp prepare_parse_string([delimiter | tail], delimiter, acc), do: prepare_parse_string(tail, delimiter, ["." | acc]) diff --git a/test/money_test.exs b/test/money_test.exs index dc66717..b64296c 100644 --- a/test/money_test.exs +++ b/test/money_test.exs @@ -50,6 +50,15 @@ defmodule MoneyTest do assert Money.parse(",25", :EUR, separator: ".", delimiter: ",") == {:ok, eur(25)} assert Money.parse("-,25", :EUR, separator: ".", delimiter: ",") == {:ok, eur(-25)} + assert Money.parse("0E+1", :USD) == {:ok, usd(0)} + assert Money.parse("1000.0e1", :USD) == {:ok, usd(1_000_000)} + assert Money.parse("1000.0E1", :USD) == {:ok, usd(1_000_000)} + assert Money.parse("1000.0e+1", :USD) == {:ok, usd(1_000_000)} + assert Money.parse("1000.0E+1", :USD) == {:ok, usd(1_000_000)} + assert Money.parse("1000.0e-1", :USD) == {:ok, usd(10000)} + assert Money.parse("1000.0E-1", :USD) == {:ok, usd(10000)} + assert Money.parse("0.5e-1", :USD) == {:ok, usd(5)} + assert Money.parse("1000.0", :WRONG) == :error end