答案 0 :(得分:8)
如果您想更改实际值,请使用Eli建议的round
。但是对于许多值和某些版本的Python,这不会被表示为字符串“39.54”。如果您想将其四舍五入以生成要显示给用户的字符串,则可以执行
>>> print "%.2f" % (39.54484700000000)
39.54
或更新版本的Python
>>> print("{:.2f}".format(39.54484700000000))
39.54
答案 1 :(得分:3)
如果您使用的是十进制:
,则可以使用quantize方法In [24]: q = Decimal('0.00')
In [25]: d = Decimal("115.79341800000000")
In [26]: d.quantize(q)
Out[26]: Decimal("115.79")
答案 2 :(得分:2)
Eli提到使用圆函数 - 根据您的要求,您可能希望返回一个Decimal对象。
>>> from decimal import Decimal
>>> float_val = 39.54484700000000
>>> decimal_val = Decimal("%.2f" % float_val)
>>> print decimal_val
39.54
使用Decimal对象可以指定要跟踪的确切小数位数,这样就可以避免使用表示为39.539999999999999
的浮点数。具体来说,如果您正在进行财务计算,则几乎总是建议您远离浮点数。
你不能直接将浮点数转换为Decimals(浮点数不精确,Python无法猜测你想要它们如何舍入),所以我几乎总是先将它们转换为圆形字符串表示(即{ {1}} - "%.2f" % float_val
表示只显示两位小数,然后创建一个小数。
答案 3 :(得分:2)
round
>>> import decimal
>>> d=decimal.Decimal("39.54484700000000")
>>> round(d,2)
39.54
答案 4 :(得分:1)
使用round
:
返回浮点值x 小数点后四舍五入到n位数 点。如果省略n,则默认为 零。结果是一个浮点 数。 值四舍五入到最接近的值 功率减去n的10的倍数; 如果两个倍数相等, 舍入远离0
>>> round(39.544847, 2)
39.539999999999999
>>>
请注意,由于我的PC(x86)上的浮点数不能完全取消39.54,因此结果是关闭了epsilon。但这没有任何区别(并且是一个完全不同的问题,有许多SO问题和答案)。如果将其正确转换为字符串,您将看到您的期望:
>>> "%.2f" % round(39.544847, 2)
'39.54'
答案 5 :(得分:1)
>>> round(39.54484700000000, 2)
39.54
但请注意,结果实际上不是39.54,而是39.53999999999999914734871708787977695465087890625。