in dubbo/codec/encoder.py [0:0]
def _encode_float(value):
"""
对浮点类型进行编码
:param value:
:return:
"""
result = []
int_value = int(value)
if int_value == value:
if int_value == 0:
result.append(0x5b)
return result
elif int_value == 1:
result.append(0x5c)
return result
elif -0x80 <= int_value < 0x80:
result.append(0x5d)
result.append(int_value)
return result
elif -0x8000 <= int_value < 0x8000:
result.append(0x5e)
result.append(int_value >> 8)
result.append(int_value)
return result
mills = int(value * 1000)
if 0.001 * mills == value and MIN_INT_32 <= mills <= MAX_INT_32:
result.append(0x5f)
result.append(mills >> 24)
result.append(mills >> 16)
result.append(mills >> 8)
result.append(mills)
return result
bits = double_to_long_bits(value)
result.append(ord('D'))
result.append(bits >> 56)
result.append(bits >> 48)
result.append(bits >> 40)
result.append(bits >> 32)
result.append(bits >> 24)
result.append(bits >> 16)
result.append(bits >> 8)
result.append(bits)
return result