2014-11-02 271 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()不只是轉換它被賦予一個字符串