2014-11-02 94 views
0

我正在读取一个大的ascii文件,转换为二进制文件,并对其进行压缩以减小文件大小。我想重新准确地复制原始文件。但是,数字格式化是个问题。我相信原始文件是用唯一标识浮点数所需的最少字符数打印的。Python浮点格式化最小字符

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]

我想打印Ÿ酷似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

此致是[重复问题](http://stackoverflow.com/questions/26689004/format-a-float-to-a-string-with-minimum-字符在python),我建议你删除你的旧问题,或者,更好的,删除这一个,并编辑前一个.. – gboffi 2014-11-02 09:44:42

回答

0

这个问题是一个Python浮点为64位对象。在调用str()之前将其转换为numpy.float32会导致我想要的数字格式化。

print str(np.float32(y[0])) 

打印

3.14 
0

试试这个:

for i in y: 
    print "%.2f" % i 

所有str()不只是转换它被赋予一个字符串