in double.go [109:152]
func (d *Decoder) decDouble(flag int32) (interface{}, error) {
var (
err error
tag byte
)
if flag != TAG_READ {
tag = byte(flag)
} else {
tag, _ = d.ReadByte()
}
switch tag {
case BC_LONG_INT:
return d.decInt32(TAG_READ)
case BC_DOUBLE_ZERO:
return float64(0), nil
case BC_DOUBLE_ONE:
return float64(1), nil
case BC_DOUBLE_BYTE:
var i8 int8
err = binary.Read(d.reader, binary.BigEndian, &i8)
return float64(i8), perrors.WithStack(err)
case BC_DOUBLE_SHORT:
var i16 int16
err = binary.Read(d.reader, binary.BigEndian, &i16)
return float64(i16), perrors.WithStack(err)
case BC_DOUBLE_MILL:
var i32 int32
err = binary.Read(d.reader, binary.BigEndian, &i32)
return float64(i32) / 1000, perrors.WithStack(err)
case BC_DOUBLE:
var f64 float64
err = binary.Read(d.reader, binary.BigEndian, &f64)
return f64, perrors.WithStack(err)
}
return nil, perrors.Errorf("decDouble parse double wrong tag:%d-%#x", int(tag), tag)
}