Пример #1
0
        internal static unsafe bool TryParseSingle(string value, NumberStyles options, NumberFormatInfo numfmt, out float result)
        {
            byte *       stackBuffer = stackalloc byte[1 * 0x72];
            NumberBuffer number      = new NumberBuffer(stackBuffer);

            result = 0f;
            double num = 0.0;

            if (!TryStringToNumber(value, options, ref number, numfmt, false))
            {
                return(false);
            }
            if (!NumberBufferToDouble(number.PackForNative(), ref num))
            {
                return(false);
            }
            float f = (float)num;

            if (float.IsInfinity(f))
            {
                return(false);
            }
            result = f;
            return(true);
        }
Пример #2
0
        internal static unsafe double ParseDouble(string value, NumberStyles options, NumberFormatInfo numfmt)
        {
            if (value == null)
            {
                throw new ArgumentNullException("value");
            }
            byte *       stackBuffer = stackalloc byte[0x72];
            NumberBuffer number      = new NumberBuffer(stackBuffer);
            double       num         = 0.0;

            if (!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))
                {
                    throw new FormatException(Environment.GetResourceString("Format_InvalidString"));
                }
                return(double.NaN);
            }
            if (!NumberBufferToDouble(number.PackForNative(), ref num))
            {
                throw new OverflowException(Environment.GetResourceString("Overflow_Double"));
            }
            return(num);
        }
Пример #3
0
        internal static unsafe double ParseDouble(string value, NumberStyles options, NumberFormatInfo numfmt)
        {
            byte *       stackBuffer = stackalloc byte[1 * 0x72];
            NumberBuffer number      = new NumberBuffer(stackBuffer);
            double       num         = 0.0;

            StringToNumber(value, options, ref number, numfmt, false);
            if (!NumberBufferToDouble(number.PackForNative(), ref num))
            {
                throw new OverflowException(Environment.GetResourceString("Overflow_Double"));
            }
            return(num);
        }
Пример #4
0
        internal static unsafe decimal ParseDecimal(string value, NumberStyles options, NumberFormatInfo numfmt)
        {
            byte *       stackBuffer = stackalloc byte[0x72];
            NumberBuffer number      = new NumberBuffer(stackBuffer);
            decimal      num         = 0M;

            StringToNumber(value, options, ref number, numfmt, true);
            if (!NumberBufferToDecimal(number.PackForNative(), ref num))
            {
                throw new OverflowException(Environment.GetResourceString("Overflow_Decimal"));
            }
            return(num);
        }
Пример #5
0
        internal static unsafe bool TryParseDouble(string value, NumberStyles options, NumberFormatInfo numfmt, out double result)
        {
            byte *       stackBuffer = stackalloc byte[1 * 0x72];
            NumberBuffer number      = new NumberBuffer(stackBuffer);

            result = 0.0;
            if (!TryStringToNumber(value, options, ref number, numfmt, false))
            {
                return(false);
            }
            if (!NumberBufferToDouble(number.PackForNative(), ref result))
            {
                return(false);
            }
            return(true);
        }