2012-01-07 3 views
0

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

>>> pow(2,70) -2 
1180591620717411303422L 

он заканчивается на 2, как и следовало ожидать. Однако, если я попытаюсь отформатировать его, чтобы показать два десятичных знака, он округляется до 2^70, потому что поплавки не очень точны.

>>> print "{0:.2f}".format(pow(2,70) -2) 
1180591620717411303424.00 

Есть ли способ печати с форматированием, который я хочу, не теряя точности?
(и без использования каких-либо нестандартных модулей, таких как NumPy)

+2

Я не понимаю. Вы хотите напечатать целое число с десятичными знаками? Зачем? Как насчет 'print '{} .00" .format (pow (2,70) - 2) '? –

+0

десятичные разряды всегда .00 для вашего случая? – joaquin

+0

Я хочу напечатать результат вычисления с десятичными знаками, и это вычисление иногда возвращает дробные значения. Я использовал только целое число в примере, потому что это было простое число, которое было достаточно большим, чтобы показать проблему. – sapphiremirage

ответ

5

Это работает для меня:

>>> import decimal 
>>> '{0:.2f}'.format(decimal.Decimal((pow(2,70)-2))) 
1180591620717411303422.00 

Из документации decimal модуля:

Десятичный модуль обеспечивает поддержку десятичной арифметика с плавающей запятой. [...] Десятичные числа могут быть представлены точно.

+0

Я думал, что попробовал, и это не сработало, но теперь это работает по большей части. Я все еще не могу заставить его работать над чем-то вроде (pow (2,70) + .75), но, похоже, это теоретический случай (по крайней мере до сих пор), и мне не нужно об этом беспокоиться. – sapphiremirage

+0

@sapphiremirage В этом случае вам нужно будет преобразовать в 'decimal' перед любой другой операцией:' decimal.Decimal (pow (2,70)) + decimal.Decimal (0.75) ' – jcollado

Смежные вопросы