diff --git a/BeefLibs/corlib/src/Float.bf b/BeefLibs/corlib/src/Float.bf index b8e1dd9a..ef901df2 100644 --- a/BeefLibs/corlib/src/Float.bf +++ b/BeefLibs/corlib/src/Float.bf @@ -166,10 +166,30 @@ namespace System public static Result Parse(StringView val) { - bool isNeg = false; - double result = 0; + return Parse(val, NumberFormatInfo.CurrentInfo); + } + + public static Result Parse(StringView val, NumberFormatInfo info) + { + if (val.IsEmpty) + return .Err; + + bool isNeg = val[0] == '-'; + bool isPos = val[0] == '+'; + double result = 0; double decimalMultiplier = 0; - + + var val; + if (isNeg || isPos) + val.RemoveFromStart(1); + + if (@val.Equals(info.NegativeInfinitySymbol, true)) + return NegativeInfinity; + else if (val.Equals(info.PositiveInfinitySymbol, true)) + return PositiveInfinity; + else if (val.Equals(info.NaNSymbol, true)) + return NaN; + //TODO: Use Number.ParseNumber for (int32 i = 0; i < val.Length; i++) { @@ -186,7 +206,7 @@ namespace System break; } - if (c == '.') + if (c == info.NumberDecimalSeparator[0]) { if (decimalMultiplier != 0) return .Err; @@ -207,12 +227,6 @@ namespace System continue; } - if ((i == 0) && (c == '-')) - { - isNeg = true; - continue; - } - if ((c >= '0') && (c <= '9')) { result *= 10;