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'

切り捨てを期待していましたが、丸くなっているようです。では、10 分の 1 位まで切り捨てるオプションはありますか?

参考までに、私の現在のソリューションはハックに見えるのでお願いします (しかし、おそらくベスト プラクティスでしょうか?) 結果の文字列を作成し、ピリオドを見つけ、必要なピリオドの後に X 桁を見つけるだけです。

4

3 に答える 3

3

代わりにmath.floor()関数を探しています:

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

では、10 分の 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を使用しないでください。これは、最初に表現エラーと失われた精度を導入する 2 進浮動小数点数に強制するためです。

>>> 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 に答える