在python中打包和解包二进制浮点数

Wil*_*tor 6 python file-io struct binaryfiles

在进行二进制文件写入时,我在python中打包和解包二进制浮点数时遇到了一些麻烦.这是我做的:

import struct

f = open('file.bin', 'wb')
value = 1.23456
data = struct.pack('f',value)
f.write(data)
f.close()

f = open('file.bin', 'rb')
print struct.unpack('f',f.read(4))
f.close()
Run Code Online (Sandbox Code Playgroud)

我得到的结果如下:

(1.2345600128173828,)
Run Code Online (Sandbox Code Playgroud)

附加数字是怎么回事?这是一个舍入误差吗?这是如何运作的?

Mar*_*ers 7

在大多数平台上,Python浮点数是C所称的double,但你把数据写成了float相反的,它的精度只有一半.

如果你使用double,你的精确度损失会更少:

>>> data = struct.pack('d',value)
>>> struct.unpack('d',data)
(1.23456,)
>>> data = struct.pack('f',value)
>>> struct.unpack('f',data)
(1.2345600128173828,)
Run Code Online (Sandbox Code Playgroud)

float结构格式只提供单精度(为显著精度24位).

  • 不.基本上,你有<= 24个术语,你可以添加或省略:1,1/2,1/4,1/8,1/16等,然后你将总和乘以2的幂 - 2 ^ -126到2 ^ 127. (3认同)