根据需要确切的十进制值

时间:2013-03-02 10:10:05

标签: python decimal

  

输入:

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保持此分数不变(这不应在输入中更改)

2 个答案:

答案 0 :(得分:1)

  

我需要输出中的第7项(对于k = 6)恰好是3.141592,

您查看3.141593的原因是该值已四舍五入到最接近的数字,并带有六位十进制数字。要更改舍入模式,请根据需要设置getcontext().rounding

The available modes are

  • ROUND_CEILING(朝向无限),
  • ROUND_DOWN(朝零),
  • ROUND_FLOOR(朝向-Infinity),
  • ROUND_HALF_DOWN(最接近关系为零),
  • ROUND_HALF_EVEN(距离最接近的偶数整数),
  • ROUND_HALF_UP(距离零最近的关系)或
  • ROUND_UP(远离零)。
  • ROUND_05UP(如果在向零舍入后的最后一位数字为0或5,则为零;否则为零)

截断数字,向零舍入。

答案 1 :(得分:0)

使用

getcontext().rounding = ROUND_DOWN 

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

希望这能解决你的问题。