Skip to content

Commit

Permalink
feat: add support parsing scientific notation (#240)
Browse files Browse the repository at this point in the history
  • Loading branch information
Nitrino authored Feb 26, 2025
1 parent eee8550 commit 15b3fb0
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 0 deletions.
9 changes: 9 additions & 0 deletions lib/money.ex
Original file line number Diff line number Diff line change
Expand Up @@ -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])

Expand Down
9 changes: 9 additions & 0 deletions test/money_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down

0 comments on commit 15b3fb0

Please sign in to comment.