@@ -97,14 +97,18 @@ defmodule DateTimeParser.Parser.Serial do
9797 )
9898 end
9999
100- defp time_from_serial ( 0.0 ) , do: { 0 , 0 , 0 }
101-
102100 defp time_from_serial ( serial_time ) do
103- { hours , min_fraction } = split_float ( serial_time * 24 )
104- { minutes , sec_fraction } = split_float ( min_fraction * 60 )
105- { seconds , _microseconds } = split_float ( sec_fraction * 60 )
101+ case serial_time do
102+ zero when zero in [ + 0.0 , - 0.0 ] ->
103+ { 0 , 0 , 0 }
104+
105+ serial_time ->
106+ { hours , min_fraction } = split_float ( serial_time * 24 )
107+ { minutes , sec_fraction } = split_float ( min_fraction * 60 )
108+ { seconds , _microseconds } = split_float ( sec_fraction * 60 )
106109
107- { hours , minutes , seconds }
110+ { hours , minutes , seconds }
111+ end
108112 end
109113
110114 defp date_from_serial ( serial_date ) do
@@ -123,7 +127,7 @@ defmodule DateTimeParser.Parser.Serial do
123127 defp split_float ( float ) when float < 0 do
124128 whole = abs ( float ) |> Float . floor ( ) |> round ( )
125129 fraction = 1 - ( abs ( float ) - whole )
126- fraction = if fraction == 1.0 , do: 0.0 , else: fraction
130+ fraction = if fraction == 1.0 , do: + 0.0 , else: fraction
127131 { whole * - 1 , fraction }
128132 end
129133
0 commit comments