-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是该值被四舍五入到最接近的带有六位小数的数字。要更改舍入模式,请getcontext().rounding根据需要进行设置。

可用的模式有

  • ROUND_CEILING(朝向无穷大),
  • ROUND_DOWN(趋近于零),
  • ROUND_FLOOR(朝向 -Infinity),
  • 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 回答