1

Pythonで小数部を5桁または7桁で切り捨てる方法はありますか?

そうでない場合、e**(-x) のような float のサイズが大きくなりすぎないようにするにはどうすればよいですか?

ありがとう

4

3 に答える 3

5

をキャッチするか、モジュールOverflowErrorを使用してください。decimalPython は、オーバーフローに問題がないと想定しません。

>>> 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')
于 2012-05-17T22:07:37.840 に答える
2

「結果が大きすぎる」とは、数値の 10 進数表現の文字数を指すものではありません。つまり、指数関数から得られた数値が、Python が浮動小数点値を格納するために内部で使用する型が何であれ、オーバーフローするのに十分な大きさであることを意味します。

浮動小数点計算を処理するために別の型を使用するか、e**(-x) がオーバーフローまたはアンダーフローしないようにコードを修正する必要があります。

于 2012-05-17T22:28:52.273 に答える
0

これはうまくいくようです

from decimal import *
getcontext().prec = 7
math.exp(- Decimal(x))
于 2012-05-18T14:13:26.017 に答える