python浮动格式怪异?

时间:2013-08-09 15:12:29

标签: python floating-point rounding

我正在尝试调试执行非常相似的代码的两个不同的python脚本。这些脚本设置a,这是一个简单的浮点数。

对于脚本1:

ipdb> print sys.version
2.7 (r27:82500, Jul 15 2010, 13:04:38)
[GCC 4.1.2 20071124 (Red Hat 4.1.2-42)]
ipdb> type(a)
<type 'float'>
ipdb> print a
17.23105
ipdb> print '{0:.4f}'.format(a)
17.2311

对于脚本2:

ipdb> print sys.version
2.7 (r27:82500, Jul 15 2010, 13:04:38)
ipdb> print type(a)
<type 'float'>
ipdb> print a
17.23105
ipdb> print '{0:.4f}'.format(a)
17.2310

在这两种情况下,a格式有何不同?如果我已经检查过它们在a的值是否相同,那么17.23105在两个脚本之间可能会有什么不同? (不幸的是,最初设置a的python代码非常非常长......我不想让每个人都拥有1000多行...

1 个答案:

答案 0 :(得分:6)

浮点数的str表示在Python 2上截断为12位数。这是不幸的。您必须print repr(a)以确保您看到足够的精度来唯一标识浮动。可能只有很小的差异只会出现在12位数之后。

在Python 3上,strrepr为浮点数生成相同的输出,因此您不会遇到此问题。