字典记录在打印时被截断

goo*_*ion 8 python floating-point dictionary python-2.7

我有一个包含一些浮点值的字典.

当我按原样打印字典时,我会完全准确地打印这些值.

但是,当我尝试单独打印每个值时,我会将它们截断.

一个简单的编码示例来说明问题:

d = {'x': 0.010000000000000231}
print d      # outputs {'x': 0.010000000000000231}
print d['x'] # outputs 0.01
Run Code Online (Sandbox Code Playgroud)

现在,我当然可以使用format,即在上面的例子中解决这个问题:

print '{:.18f}'.format(d['x']) # outputs 0.010000000000000231
Run Code Online (Sandbox Code Playgroud)

但是,我希望避免这种解决方案.

首先,因为我不知道字典中每个条目所需的精确精度.其次,因为我更喜欢避免繁琐的编码类型,这涉及到指定每个字段的打印格式.

换句话说,我想做的事情如下:

print 'x = {}'.format(d['x'])
Run Code Online (Sandbox Code Playgroud)

要么:

print 'x =',d['x']
Run Code Online (Sandbox Code Playgroud)

d['x']以完全精确的方式获得打印的价值.

为什么Python解释器选择不同的打印格式dd['x'],我可以采取什么样的方式在这里为了达到我的目的?

非常感谢您的帮助.

cs9*_*s95 3

__str__您看到的是调用方法时打印的内容与调用方法时打印的内容之间的差异__repr__

一个例子:

In [816]: print 0.010000000000000231
0.01

In [817]: print repr(0.010000000000000231)
0.010000000000000231
Run Code Online (Sandbox Code Playgroud)

造成这种差异的原因是因为str尝试截断 python2 中的数字。

这在 python3 中发生了变化,并且str和 的repr行为一致。