我正在读取一个大的ascii文件,转换为二进制文件,并压缩它以减小文件大小。我想准确地重现原始文件。但是,数字格式是一个问题。我相信原始文件使用唯一标识浮点数所需的最少字符数打印。
import struct
x = [3.14, 3.1]
y = list(struct.unpack('2f', struct.pack('2f', *x)))
print str(x)
print str(y)
返回 [3.14,3.1] [3.140000104904175,3.0999999046325684]
我想打印y与x完全一样。我怎样才能做到这一点?另外,我不明白str功能引擎盖下发生了什么魔术。你能解释一下吗?我使用的是Python 2.7。
更新
import struct
x = [3.14, 3.1]
y = list(struct.unpack('2d', struct.pack('2d', *x)))
print str(x)
print str(y)
上面的代码返回:
[3.14, 3.1]
[3.14, 3.1]
因此str函数会截断字符,但仅当该值非常接近64位浮点值时才会截断。当值非常接近32位浮点值时,我想要类似的行为。
答案 0 :(得分:0)
试试这个:
for i in y:
print "%.2f" % i
所有str()
只是将给定的对象转换为字符串
答案 1 :(得分:0)
这个问题是python float是64位。在调用str()之前强制转换为numpy.float32会生成一个符合我想要的数字。
print str(np.float32(y[0]))
打印
3.14