Python не будет печатать более 12 значащих цифр. Как печатать проще?

Я делал калькулятор и хотел использовать пи, однако python просто сокращает пи до 12 д.п. и я хотел всего пи.

У меня есть простой код в файле с именем getpi.py:

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

и я получаю его с этим кодом:

import getpi
print getpi.getpisend()

Однако он печатает только это:

3.14159265359

Как заставить его печатать все миллион цифр, не превращая его в строку. Потому что тогда я не могу использовать его в калькуляторе. Я попытался преобразовать его в строку, а затем обратно в число с плавающей запятой, но получаю эту ошибку:

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

` РЕДАКТИРОВАТЬ: Вероятно, это глупо делать это, потому что на самом деле это непригодно для использования, потому что вам придется записывать / печатать множество данных, но это помогло мне лучше понять Python ????! Отдельное спасибо @qxz за показ теории!


person jimbob88    schedule 03.12.2016    source источник
comment
Числа с плавающей запятой имеют ограниченную точность в памяти. Если вы хотите хранить числа в большем количестве, загляните в арифметическую библиотеку произвольной точности. (Другими словами, вы не можете использовать обычный number)   -  person qxz    schedule 03.12.2016
comment
@qxz хорошо. Я попробую это сейчас   -  person jimbob88    schedule 03.12.2016
comment
int может содержать только целое число -_-   -  person Paul Stelian    schedule 03.12.2016
comment
@Paul Stelian Я пробовал это потом, и это не удалось :(   -  person jimbob88    schedule 03.12.2016
comment
Это может быть ваш ответ. Как я могу показать иррациональное число до 100 знаков после запятой в python?   -  person mcmxl    schedule 03.12.2016
comment
@qxz Это действительно трудно понять, так как я совершенно неопытен!   -  person jimbob88    schedule 20.12.2016
comment
@wowcha Прочтите это: Арифметика с плавающей запятой: проблемы и ограничения   -  person qxz    schedule 21.12.2016
comment
@qxz Быстро прочитал это, и да, это интересно, и записал это как примечание! Кто новенький, столько еще до доли!!!!   -  person jimbob88    schedule 21.12.2016


Ответы (1)


используйте 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'
person sirfz    schedule 03.12.2016
comment
Не забудьте import decimal. - person Christian Dean; 03.12.2016
comment
Однако это создает строку, которая не может выполнять математические вычисления? - person jimbob88; 03.12.2016
comment
Вы выполняете вычисления с объектом Decimal, а не со строкой. - person sirfz; 03.12.2016
comment
Спасибо, я попробую это! - person jimbob88; 09.12.2016
comment
@leaf Большое спасибо, я не знал, что это не стандартно! Так должно быть! - person jimbob88; 21.12.2016