当您谈论尾随零时,这是一个关于字符串表示的问题,
您可以使用
>>> "%.2f" % round(2606.89579999999, 2)
'2606.90'
或者使用现代风格format
功能:
>>> '{:.2f}'.format(round(2606.89579999999, 2))
'2606.90'
并删除点replace
or translate
(_
指 python 控制台中上一个命令的结果):
>>> _.translate(None, '.')
'260690'
请注意,此处不需要舍入,因为.2f
格式应用相同的舍入:
>>> "%.2f" % 2606.89579999999
'2606.90'
但正如您提到的 Excel,您可能会选择推出自己的舍入函数,或者使用decimal, as float.round
由于浮点表示可能会导致奇怪的结果:
>>> round(2.675, 2)
2.67
>>> round(2606.89579999999, 2)
2606.89
带十进制使用quantize:
>>> from decimal import *
>>> x = Decimal('2606.8950000000001')
# Decimal('2606.8950000000001')
>>> '{}'.format(x.quantize(Decimal('.01'), rounding=ROUND_HALF_EVEN))
'2606.90'
对于您最初的任务,这将变为:
>>> x = Decimal('2606.8950000000001')
>>> int((x*100).quantize(1, rounding=ROUND_HALF_EVEN))
260690
奇怪的舍入原因出现在前面Decimal
:
>>> x = Decimal(2606.8950000000001)
# Decimal('2606.89499999999998181010596454143524169921875') # internal float repr