在Decimal类Python中设置精度

时间:2014-12-24 13:54:14

标签: python floating-point decimal floating-point-precision floating

我刚学会了Python中的Decimal类,我在修改十进制数的精度方面遇到了一些问题。代码:

from decimal import *

def main() :
  getcontext().prec = 50
  print Decimal(748327402479023).sqrt()

if __name__ == '__main__' :
  main()

输出:

27355573.51764029457632865944595074348085555311409538
1.414213562373095048801688724209698078569671875376948

它不显示50位小数,而是显示总共50位数。有办法解决这个问题吗?

修改:

我正在解决一个需要大浮点精度的问题。这就是我必须使用python的原因。现在,如果问题的答案是例如0.55,我应该打印0.55,然后是48个零......

1 个答案:

答案 0 :(得分:0)

这样做的一种方法是将prec设置得比您需要的高得多,然后使用round。 Python 3:

>>> getcontext().prec=100
>>> print(round(Decimal(748327402479023).sqrt(), 50))
27355573.51764029457632865944595074348085555311409538175920
>>> print(round(Decimal(7483).sqrt(), 50))
86.50433515148243713481567854198645604944135142208905

对于Python 2,请执行:

>>> print Decimal(748327402479023).sqrt().quantize(Decimal('1E-50'))
27355573.51764029457632865944595074348085555311409538175920

prec的值取决于您的数字有多大,但必须大于您的数字的log10,否则您将获得decimal.InvalidOperation: quantize result has too many digits for current context例外。