diff --git a/e3d/e3d_bzw.erl b/e3d/e3d_bzw.erl index 4c722d8e..f6fc8246 100644 --- a/e3d/e3d_bzw.erl +++ b/e3d/e3d_bzw.erl @@ -302,7 +302,7 @@ str2float(S) -> str2float_1(S). str2float_1(S) -> try - list_to_float(S) + wings_util:string_to_float(S) catch error:badarg -> str2float_2(S, []) @@ -314,7 +314,7 @@ str2float_2([H|T], Acc) when H == $e; H == $E -> (D) when $0 =< D, D =< $9 -> ok end, Acc), NumStr = reverse(Acc, ".0e") ++ T, - list_to_float(NumStr); + wings_util:string_to_float(NumStr); str2float_2([H|T], Acc) -> str2float_2(T, [H|Acc]); str2float_2([], Acc) -> diff --git a/e3d/e3d_obj.erl b/e3d/e3d_obj.erl index 6509cba4..e9d4b5d3 100644 --- a/e3d/e3d_obj.erl +++ b/e3d/e3d_obj.erl @@ -381,7 +381,7 @@ str2float(S) -> str2float_1(S). str2float_1(S) -> try - list_to_float(S) + wings_util:string_to_float(S) catch error:badarg -> str2float_2(S, []) @@ -393,7 +393,7 @@ str2float_2([H|T], Acc) when H == $e; H == $E -> (D) when $0 =< D, D =< $9 -> ok end, Acc), NumStr = reverse(Acc, ".0e") ++ T, - list_to_float(NumStr); + wings_util:string_to_float(NumStr); str2float_2([H|T], Acc) -> str2float_2(T, [H|Acc]); str2float_2([], Acc) -> diff --git a/src/wings_util.erl b/src/wings_util.erl index 426abe41..70f6128f 100644 --- a/src/wings_util.erl +++ b/src/wings_util.erl @@ -231,10 +231,15 @@ nonzero(Value) -> true -> Value end. -string_to_float("NaN") -> 0.0; string_to_float(Str) -> - try list_to_float(Str) - catch _:_ -> make_float2(Str) + case string:to_lower(Str) of + "nan" -> 0.0; + "inf" -> 1.0e16; + "-inf" -> 1.0e-16; + _ -> + try list_to_float(Str) + catch _:_ -> make_float2(Str) + end end. make_float2(Str) ->