diff --git a/lib/decimal.ex b/lib/decimal.ex index c2cd614..d508db0 100644 --- a/lib/decimal.ex +++ b/lib/decimal.ex @@ -2012,15 +2012,15 @@ defmodule Decimal do defp parse_float("." <> rest), do: parse_digits(rest) defp parse_float(bin), do: {[], bin} - defp parse_exp(<>) when e in [?e, ?E] do - case rest do - <> when sign in [?+, ?-] -> - {digits, rest} = parse_digits(rest) - {[sign | digits], rest} + defp parse_exp(<>) + when e in [?e, ?E] and sign in [?+, ?-] and digit in ?0..?9 do + {digits, rest} = parse_digits(rest) + {[sign, digit | digits], rest} + end - _ -> - parse_digits(rest) - end + defp parse_exp(<>) when e in [?e, ?E] and digit in ?0..?9 do + {digits, rest} = parse_digits(rest) + {[digit | digits], rest} end defp parse_exp(bin) do diff --git a/test/decimal_test.exs b/test/decimal_test.exs index 0ddb468..5acc93e 100644 --- a/test/decimal_test.exs +++ b/test/decimal_test.exs @@ -73,6 +73,8 @@ defmodule DecimalTest do assert Decimal.parse("a") == :error assert Decimal.parse("test") == :error assert Decimal.parse("e0") == :error + + assert Decimal.parse("1e-d") == {d(1, 1, 0), "e-d"} end test "nan?/1" do