我希望a四舍五入到13.95。我试过用圆形,但我得到:

>>> a
13.949999999999999
>>> round(a, 2)
13.949999999999999

有关标准库Decimal类的类似问题,请参阅How can I format a Decimal to always show 2 Decimal places?。


当前回答

让我举一个Python 3.6的f-string/模板字符串格式的例子,我认为它非常整洁:

>>> f'{a:.2f}'

它也适用于较长的示例,使用运算符,不需要括号:

>>> print(f'Completed in {time.time() - start:.2f}s')

其他回答

它正按照您的指示执行,并且工作正常。阅读更多关于浮点混淆的内容,并尝试使用十进制对象。

您可以修改输出格式:

>>> a = 13.95
>>> a
13.949999999999999
>>> print "%.2f" % a
13.95

Python教程有一个名为“浮点算术:问题和限制”的附录。阅读它。它解释了正在发生的事情以及为什么Python做得最好。它甚至有一个与您的示例相匹配的示例。让我引用一点:

>>> 0.10.10000000000000001您可能会尝试使用round()函数将其切回单个您期望的数字。但这并不意味着差异:>>>圆形(0.1,1)0.10000000000000001问题是二进制文件为“0.1”存储的浮点值已经是最好的二进制了接近1/10,因此尝试再圆一次也不能让它变得更好:它已经很好了。另一个结果是,由于0.1不是十分之一,加十0.1的值可能不会产生精确的结果1.0,或者:>>>总和=0.0>>>对于范围(10)中的i:…总和+=0.1...>>>总和0.99999999999999989

解决问题的另一种方法是使用十进制模块。

我使用的方法是字符串切片。它相对快速和简单。

首先,将浮点数转换为字符串,然后选择您希望的长度。

float = str(float)[:5]

在上面的单行中,我们将值转换为字符串,然后将字符串仅保留为其前四位数字或字符(包括)。

希望这有帮助!

在Python 2.7中:

a = 13.949999999999999
output = float("%0.2f"%a)
print output