ToDouble() публичный статический Метод

public static ToDouble ( byte value, int startIndex ) : double
value byte
startIndex int
Результат double
Пример #1
0
        public override async Task Decode(EbmlParser parser, bool forceDecode = false)
        {
            if (Decoded && !forceDecode)
            {
                return;
            }
            if (parser == null)
            {
                throw new ArgumentNullException(nameof(parser));
            }
            if (parser.DataAccessor == null)
            {
                throw new InvalidOperationException(
                          ExceptionsResourceManager.ResourceManager.GetString("InvalidDecodeState", CultureInfo.CurrentCulture));
            }

            switch (DataSize.DataSize)
            {
            case 0:
                Value = 0;
                break;

            case 4:
                var floatBuffer = new byte[4];
                parser.DataAccessor.Position = DataPosition;
                await parser.DataAccessor.ReadAsync(floatBuffer, 0, 4).ConfigureAwait(false);

                Utility.ConvertEndiannes(floatBuffer);
                Value = BitConverter.ToSingle(floatBuffer);
                break;

            case 8:
                var doubleBuffer = new byte[8];
                parser.DataAccessor.Position = DataPosition;
                await parser.DataAccessor.ReadAsync(doubleBuffer, 0, 8).ConfigureAwait(false);

                Utility.ConvertEndiannes(doubleBuffer);
                Value = BitConverter.ToDouble(doubleBuffer);
                break;

            default:
                throw new DecodeException("Can not decode a decimal number that is not either 0, 4 or 8 bytes long");
            }

            Decoded = true;
        }
Пример #2
0
        public DataPage(byte[] page)
        {
            _byteIterator = 0;

            Records = new List <Record> {
                Capacity = Static.GetRecordsPerPage()
            };
            UsedSpace      = BC.ToInt32(page, _byteIterator);
            _byteIterator += sizeof(int);

            for (var i = 0; i < UsedSpace; i++)
            {
                var key = BC.ToUInt32(page, _byteIterator);
                _byteIterator += sizeof(uint);
                var radius = BC.ToDouble(page, _byteIterator);
                _byteIterator += sizeof(double);
                var angle = BC.ToInt16(page, _byteIterator);
                _byteIterator += sizeof(short);

                Records.Add(new Record(key, radius, angle));
            }
        }
Пример #3
0
 public static double ToDouble(ReadOnlySpan <byte> value) => Converter.ToDouble(value);
Пример #4
0
        /// <summary>转为浮点数</summary>
        /// <param name="value">待转换对象</param>
        /// <param name="defaultValue">默认值。待转换对象无效时使用</param>
        /// <returns></returns>
        public virtual Double ToDouble(Object value, Double defaultValue)
        {
            if (value == null || value == DBNull.Value)
            {
                return(defaultValue);
            }

            // 特殊处理字符串,也是最常见的
            if (value is String str)
            {
                str = ToDBC(str).Trim();
                if (str.IsNullOrEmpty())
                {
                    return(defaultValue);
                }

                if (Double.TryParse(str, out var n))
                {
                    return(n);
                }
                return(defaultValue);
            }
            else if (value is Byte[] buf)
            {
                if (buf == null || buf.Length < 1)
                {
                    return(defaultValue);
                }

                switch (buf.Length)
                {
                case 1:
                    return(buf[0]);

                case 2:
                    return(BitConverter.ToInt16(buf, 0));

                case 3:
                    return(BitConverter.ToInt32(new Byte[] { buf[0], buf[1], buf[2], 0 }, 0));

                case 4:
                    return(BitConverter.ToInt32(buf, 0));

                default:
                    // 凑够8字节
                    if (buf.Length < 8)
                    {
                        var bts = new Byte[8];
                        Buffer.BlockCopy(buf, 0, bts, 0, buf.Length);
                        buf = bts;
                    }
                    return(BitConverter.ToDouble(buf, 0));
                }
            }

            try
            {
                return(Convert.ToDouble(value));
            }
            catch { return(defaultValue); }
        }
Пример #5
0
 /// <summary>
 /// 从流中读入一个 <see cref="T:System.Int64"/>
 /// </summary>
 /// <param name="stream">要读取的流</param>
 /// <returns>读取的 <see cref="T:System.Int64"/></returns>
 public static double ReadDouble(this Stream stream)
 {
     return(BitConverter.ToDouble(stream.ReadBuffer(sizeof(double)), 0));
 }