2016-12-03 1 views
2

Ich machte einen Rechner und ich wollte Pi verwenden, aber Python verkürzt nur pi bis 12 d.p. und ich wollte das ganze pi.Python druckt nicht mehr als 12 signifikante Zahlen. Wie drucke ich einfacher?

Ich habe einen einfachen Code in einer Datei getpi.py genannt:

def getpisend(): 
    pi=*pi to a million places* 
return pi 

und ich empfange es mit diesem Code:

import getpi 
print getpi.getpisend() 

aber es druckt nur das:

3.14159265359

Wie kann ich alle eine Million Ziffern drucken, ohne sie zu einer Zeichenfolge zu machen? Denn dann kann ich es nicht in einem Taschenrechner verwenden. Ich habe versucht, es in einen String zu ändern und dann zurück auf einen Schwimmer, aber diese Fehlermeldung erhalten:

Traceback (most recent call last): 
File "use-pi.py", line 2, in <module> 
print (int(pifunc.getpisend())) 
ValueError: invalid literal for int() with base 10:3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117067982148086513282306647093844609550582231725359408128481117450284102701938521105559644622948954930381 

` EDIT: Es ist wahrscheinlich dumm, dies zu tun, weil es nicht wirklich nutzbar ist, weil Sie haben würden schreibe/drucke viele Daten, aber das hat mir geholfen, Python viel besser zu verstehen! Besonderer Dank an @qxz für die Darstellung der Theorie!

+3

Gleitkommazahlen haben eine begrenzte Menge an Präzision im Speicher. Wenn Sie Zahlen mit mehr speichern möchten, suchen Sie in einer arithmetischen Bibliothek mit beliebiger Genauigkeit. (Mit anderen Worten, Sie können nicht mit nur einer normalen 'Nummer') – qxz

+0

@qxz okay. Ich werde versuchen, dies jetzt – wowcha

+0

int kann nur eine ganze Zahl halten -_- –

Antwort

6

Verwendung decimal.Decimal:

In [57]: f = decimal.Decimal('3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117067982148086513282306647093844609550582231725359 
    ...: 408128481117450284102701938521105559644622948954930381') 

In [58]: f 
Out[58]: Decimal('3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117067982148086513282306647093844609550582231725359408128481117450284102701938521105559644622948954930381') 

In [59]: f.to_eng_string() 
Out[59]: '3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117067982148086513282306647093844609550582231725359408128481117450284102701938521105559644622948954930381' 
+0

Ich versuche gerade :) – wowcha

+0

WOW - Gerade durch es funktioniert :) – wowcha

+0

Vergessen Sie nicht zu 'dezimal importieren '. –