@@ -37,27 +37,31 @@ defmodule Float do
37
37
end
38
38
end
39
39
40
+ def parse ( "+" <> binary ) do
41
+ parse_unsigned ( binary )
42
+ end
43
+
40
44
def parse ( binary ) do
41
45
parse_unsigned ( binary )
42
46
end
43
47
44
- defp parse_unsigned ( << char , rest :: binary >> ) when char in ?0 .. ?9 , do:
45
- parse_unsigned ( rest , false , false , << char >> )
48
+ defp parse_unsigned ( << digit , rest :: binary >> ) when digit in ?0 .. ?9 , do:
49
+ parse_unsigned ( rest , false , false , << digit >> )
46
50
47
51
defp parse_unsigned ( binary ) when is_binary ( binary ) , do:
48
52
:error
49
53
50
- defp parse_unsigned ( << char , rest :: binary >> , dot? , e? , acc ) when char in ?0 .. ?9 , do:
51
- parse_unsigned ( rest , dot? , e? , << acc :: binary , char >> )
54
+ defp parse_unsigned ( << digit , rest :: binary >> , dot? , e? , acc ) when digit in ?0 .. ?9 , do:
55
+ parse_unsigned ( rest , dot? , e? , << acc :: binary , digit >> )
52
56
53
- defp parse_unsigned ( << ?. , char , rest :: binary >> , false , false , acc ) when char in ?0 .. ?9 , do:
54
- parse_unsigned ( rest , true , false , << acc :: binary , ?. , char >> )
57
+ defp parse_unsigned ( << ?. , digit , rest :: binary >> , false , false , acc ) when digit in ?0 .. ?9 , do:
58
+ parse_unsigned ( rest , true , false , << acc :: binary , ?. , digit >> )
55
59
56
- defp parse_unsigned ( << ?e , char , rest :: binary >> , dot? , false , acc ) when char in ?0 .. ?9 , do:
57
- parse_unsigned ( rest , true , true , << add_dot ( acc , dot? ) :: binary , ?e , char >> )
60
+ defp parse_unsigned ( << exp_marker , digit , rest :: binary >> , dot? , false , acc ) when exp_marker in 'eE' and digit in ?0 .. ?9 , do:
61
+ parse_unsigned ( rest , true , true , << add_dot ( acc , dot? ) :: binary , ?e , digit >> )
58
62
59
- defp parse_unsigned ( << ?e , ?- , char , rest :: binary >> , dot? , false , acc ) when char in ?0 .. ?9 , do:
60
- parse_unsigned ( rest , true , true , << add_dot ( acc , dot? ) :: binary , ?e , ?- , char >> )
63
+ defp parse_unsigned ( << exp_marker , sign , digit , rest :: binary >> , dot? , false , acc ) when exp_marker in 'eE' and sign in '-+' and digit in ?0 .. ?9 , do:
64
+ parse_unsigned ( rest , true , true , << add_dot ( acc , dot? ) :: binary , ?e , sign , digit >> )
61
65
62
66
defp parse_unsigned ( rest , dot? , _e? , acc ) , do:
63
67
{ :erlang . binary_to_float ( add_dot ( acc , dot? ) ) , rest }
0 commit comments