NumberBufferToDouble() private method

private NumberBufferToDouble ( byte number, Double &value ) : Boolean
number byte
value Double
return Boolean
        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);
        }
Example #2
0
        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);
            }
        }
Example #4
0
        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);
        }
Example #5
0
        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));
        }