将浮点数 123.456 用网络字节序序列化: float_value = 123.456 float_stream = struct.pack("! f", float_value) 然后再反序列化: get_float_value = struct.unpack("! f", float_stream) 这时候得到的数据变成了 123.45600128173828
这不符合我的需求,我的需求要求反序列化后的结果必须是 123.456,请问大神应该怎么解决呀?
强制下格式
能不能说的再详细一点呀?怎么个强制下格式?
import struct
float_num = 123.456
float_str = str(float_num)
data = float_str.encode()
packed_data = struct.pack(f'{len(data)}s', data)
unpacked_data = struct.unpack(f'{len(data)}s', packed_data)
result = float(unpacked_data[0].decode())
print(result) # 输出 123.456
这样是不行的。 因为在打包的时候,我不能把 float_str.encode() 以后的长度也打包进二进制序列里边。 那么如果没有这个长度,解包(反序列化)的一方,是没有办法正确解出来的。
自己额外处理下不就好了
大佬能详细说一下吗?
我试了下,get_float_value 是个 tuple,如果只想要第一个元素就 "{:.3f}".format(get_float_value[0])下,也可以用 round()。 如果还想 tuple 类型,就先这样: force_transform_value = "{:.3f}".format(get_float_value[0]) tuple([eval(force_transform_value)])