【问题标题】:Python Float Formatting Minimum CharactersPython浮点格式最小字符
【发布时间】:2014-11-02 09:32:23
【问题描述】:

我正在读取一个大的 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]

我想像 x 一样打印 y。我怎样才能做到这一点?另外,我不明白 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 位浮点值时,我想要类似的行为。

【问题讨论】:

标签: python string numbers format


【解决方案1】:

试试这个:

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

所有str() 所做的只是将它提供的对象转换为字符串

【讨论】:

    【解决方案2】:

    这个问题是 python 浮点数是 64 位的。在调用 str() 之前强制转换为 numpy.float32 会产生我想要的格式化数字。

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

    打印

    3.14
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-19
      相关资源
      最近更新 更多