2013-03-02 2 views
-1

Входной сигнал:Точное Десятичный значение в соответствии с требованиями

from decimal import * 
k=10 
for i in range(k): 
    getcontext().prec=i+1 
    print(Decimal(103993)/Decimal(33102)) 

Выходной

3 # for k=0 
3.1 
3.14 
3.142 
3.1416 
3.14159 
3.141593 # for k=6 
3.1415927 
3.14159265 
3.141592653 

мне нужно 7-й член в выходе (при к = 6), чтобы быть точно 3,141592 ,

для k = 20 значение shou Ld быть 3,14159265301190260407

103993/33102 держать эту фракцию постоянной (это не должно быть изменено на входе)

+0

В чем вопрос? (т. е. я не вижу знака вопроса) – Volatility

+0

Мне нужен 7-й член в выходе (для k = 6) точно 3.141592, – Ajay

+0

Почему бы вам просто не получить значение для 'k + 1' и кликнуть' Decimal.as_tuple() 'значение? –

ответ

1

мне нужно 7-й член в выходе (к = 6), чтобы быть точно 3,141592,

Причина, по которой вы видите 3.141593, состоит в том, что значение округляется до ближайшего номера с шестью десятичными знаками. Чтобы изменить режим округления, установите getcontext().rounding, если требуется.

The available modes are:

  • ROUND_CEILING (по направлению к бесконечности),
  • ROUND_DOWN (к нулю),
  • ROUND_FLOOR (в направлении -Infinity)
  • ROUND_HALF_DOWN (к ближайшему с связи идет к нулю) ,
  • ROUND_HALF_EVEN (до ближайшего со связями, идущим к ближайшему четному целому числу),
  • ROUND_HALF_UP (до ближайший с увязками, уходящими с нуля), или
  • ROUND_UP (вдали от нуля).
  • ROUND_05UP (от нуля, если последняя цифра после округления до нуля была бы 0 или 5, в противном случае к нулю)

Чтобы усечь число, округлый к нулю.

+0

Мне нужно, чтобы значение усекалось не закругленным. – Ajay

+1

@Ajay: Как усечение отличается от округления до нуля? – NPE

+1

Итак, какая опция фактически выполняет то, что просит OP? – uselpa

0

использование

getcontext().rounding = ROUND_DOWN 

print(Decimal(103993)/Decimal(33102)) 

Надеется, что это решит вашу проблему.

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