Ron*_*nis 7 python floating-point decimal floating floating-point-precision
我刚刚学习了Python中的Decimal类,在修改十进制数字的精度时遇到了一些问题。代码:
from decimal import *
def main() :
getcontext().prec = 50
print Decimal(748327402479023).sqrt()
if __name__ == '__main__' :
main()
Run Code Online (Sandbox Code Playgroud)
输出:
27355573.51764029457632865944595074348085555311409538
1.414213562373095048801688724209698078569671875376948
Run Code Online (Sandbox Code Playgroud)
它不显示 50 位十进制数字,而是显示总共 50 位数字。有没有办法来解决这个问题?
编辑:
我正在解决一个需要大浮点精度的问题。这就是为什么我必须使用Python。现在,如果问题的答案是 0.55,我应该打印 0.55 后跟 48 个零......
一种方法是将设置prec远高于您的需要,然后使用round. Python 3:
>>> getcontext().prec=100
>>> print(round(Decimal(748327402479023).sqrt(), 50))
27355573.51764029457632865944595074348085555311409538175920
>>> print(round(Decimal(7483).sqrt(), 50))
86.50433515148243713481567854198645604944135142208905
Run Code Online (Sandbox Code Playgroud)
对于 Python 2,执行以下操作:
>>> print Decimal(748327402479023).sqrt().quantize(Decimal('1E-50'))
27355573.51764029457632865944595074348085555311409538175920
Run Code Online (Sandbox Code Playgroud)
的值prec取决于您的数字有多大,但它必须大于您的数字,否则您会遇到异常。log10decimal.InvalidOperation: quantize result has too many digits for current context
| 归档时间: |
|
| 查看次数: |
6900 次 |
| 最近记录: |