internal unsafe static bool TryParseSingle(string value, NumberStyles options, NumberFormatInfo numfmt, out float result) { byte *stackBuffer = stackalloc byte[checked (unchecked ((UIntPtr)Number.NumberBuffer.NumberBufferBytes) * 1)]; Number.NumberBuffer numberBuffer = new Number.NumberBuffer(stackBuffer); result = 0f; double num = 0.0; if (!Number.TryStringToNumber(value, options, ref numberBuffer, numfmt, false)) { return(false); } if (!Number.NumberBufferToDouble(numberBuffer.PackForNative(), ref num)) { return(false); } float num2 = (float)num; if (float.IsInfinity(num2)) { return(false); } result = num2; return(true); }
internal static unsafe double ParseDouble(string value, NumberStyles options, NumberFormatInfo numfmt) { if (value == null) { throw new ArgumentNullException("value"); } byte *stackBuffer = stackalloc byte[Number.NumberBuffer.NumberBufferBytes]; Number.NumberBuffer number = new Number.NumberBuffer(stackBuffer); double num = 0.0; if (!Number.TryStringToNumber(value, options, ref number, numfmt, false)) { string str = value.Trim(); if (str.Equals(numfmt.PositiveInfinitySymbol)) { return(double.PositiveInfinity); } if (str.Equals(numfmt.NegativeInfinitySymbol)) { return(double.NegativeInfinity); } if (str.Equals(numfmt.NaNSymbol)) { return(double.NaN); } throw new FormatException(Environment.GetResourceString("Format_InvalidString")); } if (!Number.NumberBufferToDouble(number.PackForNative(), ref num)) { throw new OverflowException(Environment.GetResourceString("Overflow_Double")); } return(num); }
internal unsafe static float ParseSingle(string value, NumberStyles options, NumberFormatInfo numfmt) { if (value == null) { throw new ArgumentNullException("value"); } byte *stackBuffer = stackalloc byte[checked (unchecked ((UIntPtr)Number.NumberBuffer.NumberBufferBytes) * 1)]; Number.NumberBuffer numberBuffer = new Number.NumberBuffer(stackBuffer); double num = 0.0; if (!Number.TryStringToNumber(value, options, ref numberBuffer, numfmt, false)) { string text = value.Trim(); if (text.Equals(numfmt.PositiveInfinitySymbol)) { return(float.PositiveInfinity); } if (text.Equals(numfmt.NegativeInfinitySymbol)) { return(float.NegativeInfinity); } if (text.Equals(numfmt.NaNSymbol)) { return(float.NaN); } throw new FormatException(Environment.GetResourceString("Format_InvalidString")); } else { if (!Number.NumberBufferToDouble(numberBuffer.PackForNative(), ref num)) { throw new OverflowException(Environment.GetResourceString("Overflow_Single")); } float num2 = (float)num; if (float.IsInfinity(num2)) { throw new OverflowException(Environment.GetResourceString("Overflow_Single")); } return(num2); } }
internal static unsafe bool TryParseSingle(string value, NumberStyles options, NumberFormatInfo numfmt, out float result) { byte *stackBuffer = stackalloc byte[Number.NumberBuffer.NumberBufferBytes]; Number.NumberBuffer number = new Number.NumberBuffer(stackBuffer); result = 0.0f; double num = 0.0; if (!Number.TryStringToNumber(value, options, ref number, numfmt, false) || !Number.NumberBufferToDouble(number.PackForNative(), ref num)) { return(false); } float f = (float)num; if (float.IsInfinity(f)) { return(false); } result = f; return(true); }
internal static unsafe bool TryParseDouble(string value, NumberStyles options, NumberFormatInfo numfmt, out double result) { byte *stackBuffer = stackalloc byte[Number.NumberBuffer.NumberBufferBytes]; Number.NumberBuffer number = new Number.NumberBuffer(stackBuffer); result = 0.0; return(Number.TryStringToNumber(value, options, ref number, numfmt, false) && Number.NumberBufferToDouble(number.PackForNative(), ref result)); }