Python Float格式化最小字符

时间:2014-11-02 09:32:24

标签: python string numbers format

我正在读取一个大的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位浮点值时,我想要类似的行为。

2 个答案:

答案 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