我想将a
四舍五入为13.95。我尝试使用round
,但是我得到的结果是:
>>> a
13.949999999999999
>>> round(a, 2)
13.949999999999999
如果您遇到了标准库Decimal类的类似问题,请参见如何格式化小数以始终显示2个小数位?。
我想将a
四舍五入为13.95。我尝试使用round
,但是我得到的结果是:
>>> a
13.949999999999999
>>> round(a, 2)
13.949999999999999
如果您遇到了标准库Decimal类的类似问题,请参见如何格式化小数以始终显示2个小数位?。
您可以修改输出格式:
>>> a = 13.95
>>> a
13.949999999999999
>>> print "%.2f" % a
13.95
numvar=12.456
,那么 "{:.2f}".format(numvar)
会得到 12.46
,但 "{:2i}".format(numvar)
会报错,我期望得到的是 12
。 - skytux在Python 2.7中:
a = 13.949999999999999
output = float("%0.2f"%a)
print output
output
的值与a
完全相同,因此您可以直接在最后一行写print a
而不是print output
。 - Mark Dickinson13.95
。但是在 Python 2.7 中,对于这个特定的 a
值,print a
也会打印出相同的结果,所以格式化步骤的目的并不是很清楚。 - Mark Dickinsona == output
操作?这在我的环境中返回True
,我猜你的环境也是如此。 - Mark Dickinsona=13.949999999999999
,我得到的结果是 _True_。
对于 a=13.9499999
,我得到的结果是 _False_。现在我有点困惑了!!! - Shashank Singhx = 1.090675765757
g = float("{:.2f}".format(x))
print(g)
选项2: 内置的round()函数支持Python 2.7或更高版本。
x = 1.090675765757
g = round(x, 2)
print(g)
Python教程有一个附录名为浮点算术:问题和限制。阅读它可以解释正在发生的事情并了解Python为什么尽力而为。甚至还有一个与你的例子相匹配的示例。让我引用一下:
>>> 0.1 0.10000000000000001
你可能会想使用
round()
函数将它截断到你期望的单个数字。但这并没有什么区别:问题在于存储在>>> round(0.1, 1) 0.10000000000000001
"0.1"
中的二进制浮点数值已经是最接近"1/10"
的二进制近似值,因此尝试再次进行舍入不会使其更好:它已经是最好的了。
另一个后果是,由于"0.1"
不完全等于"1/10"
,因此将十个"0.1"
值相加可能也不会得到完全等于"1.0"
的结果:
>>> sum = 0.0 >>> for i in range(10): ... sum += 0.1 ... >>> sum 0.99999999999999989
一个解决你问题的替代方案是使用
decimal
模块。
使用Decimal对象和round()方法的组合。
Python 3.7.3
>>> from decimal import Decimal
>>> d1 = Decimal (13.949999999999999) # define a Decimal
>>> d1
Decimal('13.949999999999999289457264239899814128875732421875')
>>> d2 = round(d1, 2) # round to 2 decimals
>>> d2
Decimal('13.95')
针对原始 Python:
将浮点数转换为字符串并保留两位小数:
a = 13.949999999999999
format(a, '.2f')
浮点数转换为浮点数后保留2位小数:
a = 13.949999999999999
round(float(a), 2)
or
float(format(a, '.2f'))