在Python 2.7.3中,这是当前行为:
>>> 8./9.
0.8888888888888888
>>> '%.1f' % (8./9.)
'0.9'
小数也是如此:
>>> from decimal import Decimal
>>> Decimal(8) / Decimal(9)
Decimal('0.8888888888888888888888888889')
>>> '%.1f' % (Decimal(8) / Decimal(9))
'0.9'
我本来希望截断,但是它似乎是完整的.那么我的选择是将其截断到十分之一吗?
仅供参考,我想问一下,因为我当前的解决方案似乎很棘手(但也许是最佳实践?),因为它可以得出结果的字符串,找到句点并仅在想要的句点之后找到X位数字.
解决方法:
So my options to truncating to the tenths place?
Decimal.quantize()方法将数字四舍五入为固定的指数,并提供对四舍五入模式的控制:
>>> from decimal import Decimal, ROUND_FLOOR
>>> Decimal('0.9876').quantize(Decimal('0.1'), rounding=ROUND_FLOOR)
Decimal('0.9')
不要在小数值上使用math.floor,因为它首先将它们强制转换为二进制浮点,从而导致表示错误和精度下降:
>>> x = Decimal('1.999999999999999999998')
>>> x.quantize(Decimal('0.1'), rounding=ROUND_FLOOR)
Decimal('1.9')
>>> math.floor(x * 10) / 10
2.0