淘先锋技术网

首页 1 2 3 4 5 6 7

I am having some trouble with packing and unpacking of binary floats in python when doing a binary file write. Here is what I have done:

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()

The result I get is the following:

(1.2345600128173828,)

What is going on with the extra digits? Is this a rounding error? How does this work?

解决方案

On most platforms, Python floats are what C would call a double, but you wrote your data out as float instead, which has half the precision.

If you were to use double, you'd have less precision loss:

>>> data = struct.pack('d',value)

>>> struct.unpack('d',data)

(1.23456,)

>>> data = struct.pack('f',value)

>>> struct.unpack('f',data)

(1.2345600128173828,)