在Python 2中计算PI,如何停止答案截断

在Python 2中计算PI,如何停止答案截断,python,decimal,Python,Decimal,请对我放松点,我已经学习Python大约一周了! 我想我应该试着用鲁马努扬公式计算π。我相信我能够正确地编写代码。 我的答案是截断,我希望用200 dp表示。在C语言中,我可能会使用malloc来实现这一点,但我知道Python不是这样工作的。 我想从这里学到的一点是:截断是由表示浮点的限制引起的吗?如果是的话,可以修复吗 谢谢 import math from decimal import * getcontext().prec = 200 def iterate(n): sum =

请对我放松点,我已经学习Python大约一周了! 我想我应该试着用鲁马努扬公式计算π。我相信我能够正确地编写代码。 我的答案是截断,我希望用200 dp表示。在C语言中,我可能会使用malloc来实现这一点,但我知道Python不是这样工作的。 我想从这里学到的一点是:截断是由表示浮点的限制引起的吗?如果是的话,可以修复吗

谢谢

import math
from decimal import *

getcontext().prec = 200
def iterate(n):
    sum = 0
    Decimal(sum)
    sum = (math.factorial(4*n))
    sum = (sum/math.pow(math.factorial(n), 4))
    sum = sum*((26390*n +1103)/math.pow(396, (4*n)))
    return sum
ans=0
Decimal(ans)    
print "Choose the number of iterations:\n"
itnum = int(raw_input())

for n in range (0, itnum+1):
    this_iteration = 0
    Decimal(this_iteration)
    this_iteration = iterate(n)
    ans = ans + this_iteration

ans =  ans*(math.pow(8, 0.5)/9801)
ans = 1/ans
print "%.200f" % ans
你的片段

sum = 0
Decimal(sum)
将sum设置为int 0,然后计算并丢弃一个十进制等价项。请改用赋值语句:

sum = Decimal(0)
接下来,您需要确保每个中间结果也被适当地转换为十进制,并且默认情况下浮点值不会被转换


就个人而言,我建议改为使用gmpy2,但我有偏见:-。

注意,代码中有两次出现数字200。您需要同时更改这两个选项以打印更多数字。我打赌您会在脚本开始时更改prec,但不会更改脚本结尾的格式字符串,即使我使用%r,它仍然会截断。上面的问题回答了我的问题…这证实了我从上面引用的问题中发现的内容,尽管我声明为字符串。