python中是否有一种方法可以将小数部分截断为5位或7位?
如果没有,我怎样才能避免像e **( - x)这样的浮点数太大?
由于
答案 0 :(得分:5)
捕获OverflowError
或使用decimal
模块。 Python不会假设您对溢出没问题。
>>> 0.0000000000000000000000000000000000000000000000000000000000000001**-30
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
OverflowError: (34, 'Result too large')
>>> d = decimal.Decimal(0.0000000000000000000000000000000000000000000000000000000000000001)
>>> d**-30
Decimal('1.000000000000001040827834994E+1920')
答案 1 :(得分:2)
“结果太大”并不是指数字的十进制表示中的字符数,这意味着指数函数产生的数字足以溢出python在内部用于存储浮动的任何类型点值。
您需要使用不同的类型来处理浮点计算,或者重新编写代码以使e **( - x)不会溢出或下溢。
答案 2 :(得分:0)
这似乎有用
from decimal import *
getcontext().prec = 7
math.exp(- Decimal(x))