3

在 Python 2.7.3 中,这是当前行为:

>>> 8./9.
0.8888888888888888
>>> '%.1f' % (8./9.)
'0.9'

s似乎也是如此Decimal

>>> from decimal import Decimal
>>> Decimal(8) / Decimal(9)
Decimal('0.8888888888888888888888888889')
>>> '%.1f' % (Decimal(8) / Decimal(9))
'0.9'

我本来希望截断,但是,它似乎是圆的。所以我选择截断到第十位?

仅供参考,我问是因为我当前的解决方案看起来很笨拙(但也许它是最佳实践?),因为它会生成一个结果字符串,找到句点并在我想要的句点之后找到 X 位数字。

4

3 回答 3

3

您正在寻找该math.floor()功能

>>> import math
>>> math.floor(8./9. * 10) / 10
0.8
于 2013-05-02T14:19:17.070 回答
1

所以我选择截断到第十位?

Decimal.quantize()方法将数字舍入为固定指数,并提供对舍入模式的控制:

>>> from decimal import Decimal, ROUND_FLOOR
>>> Decimal('0.9876').quantize(Decimal('0.1'), rounding=ROUND_FLOOR)
Decimal('0.9')

不要在Decimal值上使用math.floor ,因为它首先将它们强制为二进制浮点数,从而引入表示错误和丢失精度:

>>> x = Decimal('1.999999999999999999998')
>>> x.quantize(Decimal('0.1'), rounding=ROUND_FLOOR)
Decimal('1.9')
>>> math.floor(x * 10) / 10
2.0
于 2013-05-02T15:18:19.240 回答
0

乘以 10,然后取值。

在某些语言中:

float f = 1/3;
print(f) //Prints 0,3333333333

float q = Math.floor(f*10)/10
print(q) //Prints 0,3
于 2013-05-02T14:19:39.927 回答