3

非常によく似たコードを実行する 2 つの異なる 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

a2つのケースでフォーマットが異なる可能性はありますか? aで値が同じであることをすでに確認した場合、2 つのスクリプト間でどのような点で異なる可能性があります17.23105か? (残念ながら、最初に設定された python コードaは非常に長いです... 1000 行以上でみんなを退屈させたくありません)

4

1 に答える 1

6

floatのstr表現は、Python 2 では 12 桁に切り捨てられます。これは残念です。print repr(a)フロートを一意に識別するのに十分な精度を確認する必要があります。おそらく、12 桁の後にのみ表示される小さな違いがあります。

Python 3 では、strfloatreprに対して同じ出力が生成されるため、この問題は発生しません。

于 2013-08-09T15:14:38.950 に答える