如何在python中将小数点后的浮点数/小数适当地截断到特定位置?

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
上一篇:Mysql清空表(truncate)与删除表中数据(delete)的区别


下一篇:drop,delete与truncate的区别