2

以下は、シリーズとして与えられる約5000次多項式の近似根を見つけるための私のプログラムです。

def s(r, z):
    sm = 0
    for k in range(1, z+1):
        sm += (900-3*k) * r ** (k-1)
    return sm

target = -600000000000

n = 1
dr = .125
curr = 0
while abs(curr - target) > 1:
    curr = s(n, 5000)
    if curr > target : n+= dr
    else : n-=dr
    dr /= 2

小数点以下12桁に丸めたかったので

print round(n, 12)

それは私に与えました:

1.00232210863

数値は十分に概算ですが、現在は12桁に丸められています。私はPythonコンソールを起動し、それを自分で見つけました:

>>> n
1.0023221086328755
>>> round(n, 12)
1.002322108633

私のround()関数がPythonコンソールプロンプト内でのみ機能するのはなぜですか?

4

1 に答える 1

7

デフォルトでは、python の print は、印刷時に数値を 11 桁に丸めます。代わりに試す

print '%0.12f'%n

もう少し明確にするために、対話型コンソールにいるときに次のことを行います。

>>> x = 1.123456789012345
>>> x
1.123456789012345
>>> print x
1.12345678901

最初の呼び出しは実際にはへの呼び出しであることを覚えておいてください

x.__repr__() 

x に関する情報をできるだけ多く出力しますが、print ステートメントは次のように変換されます。

print x.__str__()

また、必要に応じて、int のstr () メソッドを構築すると、11 桁に丸められます。上記のように、python の % フォーマットを使用して、好きなだけ桁数を強制できます。

于 2012-11-22T14:28:40.463 に答える