web-dev-qa-db-ja.com

piを小数点以下の桁数で出力します

W3resourcesでの課題の1つは、piを小数点以下「n」桁で出力することです。ここに私のコードがあります:

from math import pi

fraser = str(pi)

length_of_pi = []

number_of_places = raw_input("Enter the number of decimal places you want to 
see: ")

for number_of_places in fraser:
    length_of_pi.append(str(number_of_places))

print "".join(length_of_pi)

何らかの理由で、入力を考慮せずにpiを自動的に印刷します。どんな助けも素晴らしいでしょう:)

6
Fraser

number_of_placesを使用してformatだけではない理由:

''.format(pi)
>>> format(pi, '.4f')
'3.1416'
>>> format(pi, '.14f')
'3.14159265358979'

より一般的には:

>>> number_of_places = 6
>>> '{:.{}f}'.format(pi, number_of_places)
'3.141593'

あなたの元のアプローチでは、ループの制御変数としてnumber_of_placesを使用して桁数を選択しようとしていると思いますが、これはかなりハックですが、最初のnumber_of_digitsユーザーが入力したものは使用されません。代わりに、pi文字列の反復値で置き換えられます。

10
Moses Koledoye

np.pimath.piなどを使用して提案されたソリューションは、倍精度(〜14桁)でのみ機能します。より高い精度を得るには、mpmathパッケージなどの多精度を使用する必要があります

>>> from mpmath import mp
>>> mp.dps = 20    # set number of digits
>>> print(mp.pi)
3.1415926535897932385

np.piを使用すると、間違った結果が得られます

>>> format(np.pi, '.20f')
3.14159265358979311600

真の値と比較してください:

3.14159265358979323846264338327...
8
Jonas Adler

この質問にはすでに有用な答えがありますので、同じ目的でプログラムを作成した方法を共有したいと思います。これは、質問の1つと非常によく似ています。

from math import pi
i = int(input("Enter the number of decimal places: "))
h = 0
b = list()
for x in str(pi):
    h += 1
    b.append(x)
    if h == i+2:
        break

h = ''.join(b)
print(h)

読んでくれてありがとう。

0
vedang_joshi

たとえば、mpmathパッケージ

from mpmath import mp
def a(n):
   mp.dps=n+1
   return(mp.pi)
0

なぜ単に使用しないのですか:

import numpy as np

def pidecimal(round):
    print(np.round(np.pi, round)) 
0
sai krishna