2014-11-13 2 views
0

Я ищу способ распечатать все внутренние десятичные разряды десятичного числа python. кто-нибудь знает, как добиться следующего. Код примера написан на Python.python decimal печатать все внутренние десятичные знаки

from decimal import * 
bits = 32 
precision = Decimal(1)/Decimal(2**bits) 
val = decimal(1078947848) 

, что происходит сейчас на следующем, если я умножить VAL * точность я получаю следующий результат

val * precision 
Decimal('0.2512121219187974929809570312') 

, но я знаю, что последний номер 2 не конец моего номера, так что я могу сделать, после чего дает мне этот результат

"%.100f" % x 
'0.2512121219187974929809570312500000000000000000000000000000000000000000000000000000000000000000000000' 

однако все нули не нужные, а размер% .100f зависит от заданных битов. Это должна быть простая математика и, возможно, я должен дать себе перерыв, но как я могу получить число внутренних десятичных знаков из заданного количества бит 32.

ответ

0

Вы можете взять строковое представление & устранить конечные 0; останутся ваши «внутренние десятичные знаки», которые вы можете подсчитать.

2

От documentation:

десятичный модуль имеет пользовательский поддающееся изменению точности (по умолчанию это 28 мест), которые могут быть столь же большим, как требуется для данной задачи

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

from decimal import * 
getcontext().prec = 100 
bits = 32 
precision = Decimal(1)/Decimal(2**bits) 
val = Decimal(1078947848) 
print val * precision 

Результат:

0.25121212191879749298095703125000 

Кроме того, вы можете раздеться эти завершающие нули с вызовом normalize.

>>> print (val * precision).normalize() 
0.25121212191879749298095703125 
+0

спасибо, не видели этого, но это помогает в данный момент. – ManIHang