-1

入力:

from decimal import *
k=10
for i in range(k):
    getcontext().prec=i+1
    print(Decimal(103993)/Decimal(33102))

出力

3  # for k=0
3.1
3.14
3.142
3.1416
3.14159
3.141593 # for k=6
3.1415927
3.14159265
3.141592653

出力の第 7 項 (k=6 の場合) が正確に 3.141592 になるようにする必要があります。

k=20 の場合、値は 3.14159265301190260407 になります。

103993/33102 この分数を一定に保ちます (これは入力で変更されるべきではありません)

4

2 に答える 2

1

出力の第 7 項 (k=6 の場合) が正確に 3.141592 になるようにする必要があります。

表示されている理由3.141593は、値が小数点以下 6 桁の最も近い数値に丸められているためです。丸めモードを変更するには、必要に応じて設定getcontext().roundingします。

利用可能なモードは次のとおりです。

  • ROUND_CEILING (無限に向かって)、
  • ROUND_DOWN (ゼロに向かって)、
  • ROUND_FLOOR (-無限に向かって)、
  • ROUND_HALF_DOWN (同点がゼロに向かう最も近いものへ)、
  • ROUND_HALF_EVEN (最も近い偶数の整数に同点で最も近いものへ)、
  • ROUND_HALF_UP (タイがゼロから遠ざかる最も近いものへ)、または
  • ROUND_UP (ゼロから離れて)。
  • ROUND_05UP (ゼロ方向に丸めた後の最後の桁が 0 または 5 の場合はゼロから離れ、それ以外の場合はゼロ方向)

数値を切り捨てるには、ゼロに向かって丸めます。

于 2013-03-02T10:15:15.907 に答える
0

使用する

getcontext().rounding = ROUND_DOWN 

print(Decimal(103993)/Decimal(33102))

これで問題が解決することを願っています。

于 2013-03-02T22:05:19.863 に答える