Skip to content

Commit d53c625

Browse files
authored
Fix parsing of 1e-d (#218)
1 parent c631296 commit d53c625

File tree

2 files changed

+10
-8
lines changed

2 files changed

+10
-8
lines changed

lib/decimal.ex

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2012,15 +2012,15 @@ defmodule Decimal do
20122012
defp parse_float("." <> rest), do: parse_digits(rest)
20132013
defp parse_float(bin), do: {[], bin}
20142014

2015-
defp parse_exp(<<e, rest::binary>>) when e in [?e, ?E] do
2016-
case rest do
2017-
<<sign, rest::binary>> when sign in [?+, ?-] ->
2018-
{digits, rest} = parse_digits(rest)
2019-
{[sign | digits], rest}
2015+
defp parse_exp(<<e, sign, digit, rest::binary>>)
2016+
when e in [?e, ?E] and sign in [?+, ?-] and digit in ?0..?9 do
2017+
{digits, rest} = parse_digits(rest)
2018+
{[sign, digit | digits], rest}
2019+
end
20202020

2021-
_ ->
2022-
parse_digits(rest)
2023-
end
2021+
defp parse_exp(<<e, digit, rest::binary>>) when e in [?e, ?E] and digit in ?0..?9 do
2022+
{digits, rest} = parse_digits(rest)
2023+
{[digit | digits], rest}
20242024
end
20252025

20262026
defp parse_exp(bin) do

test/decimal_test.exs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,8 @@ defmodule DecimalTest do
7373
assert Decimal.parse("a") == :error
7474
assert Decimal.parse("test") == :error
7575
assert Decimal.parse("e0") == :error
76+
77+
assert Decimal.parse("1e-d") == {d(1, 1, 0), "e-d"}
7678
end
7779

7880
test "nan?/1" do

0 commit comments

Comments
 (0)