python2.4.3:格式错误?

时间:2011-01-28 06:35:09

标签: python floating-point python-2.4

以下是一个例子:

>>> "%.2f" % 0.355
'0.35'
>>> "%.2f" % (float('0.00355') *100)
'0.36'

为什么他们给出不同的结果?

3 个答案:

答案 0 :(得分:6)

这不是格式错误。这只是浮点运算。查看格式化命令下面的值:

In [18]: float('0.00355')
Out[18]: 0.0035500000000000002

In [19]: float('0.00355')*100
Out[19]: 0.35500000000000004

In [20]: 0.355
Out[20]: 0.35499999999999998

这两个表达式会创建不同的值。

我不知道它是否在2.4中可用,但您可以使用十进制模块来完成这项工作:

>>> import decimal
>>> "%.2f" % (decimal.Decimal('0.00355')*100)
'0.35'

decimal模块将浮点数视为字符串以保持任意精度。

答案 1 :(得分:4)

因为,与所有浮点“不准确”问题一样,并非每个实数都可以用有限的位数表示。

即使我们要坚持并拥有65536位浮点格式,0到1之间的数字仍然是,......好吧,无限: - )

几乎可以肯定的是,第一个是低于 0.355(比方说,0.3549999999999),而第二个是高于(比如说,0.3550000001)。

有关此主题的进一步阅读,请参阅here

用于查看浮点数如何工作的好工具是Harald Schmidt's excellent on-line converter。这非常方便,我实际上也实现了自己的C#,能够处理IEEE754单双精度。

答案 2 :(得分:1)

具有浮点数的算术通常是不准确的。

http://en.wikipedia.org/wiki/Floating_point#Accuracy_problems