2016-08-12 8 views
0

Я хочу ограничить точность моего поплавка и использовать его как точное значение для следующих операций, но я делаю что-то неправильно с десятичным модулем. ВыходДесятичная точность и округление Python

from decimal import * 

factor = 350/float(255) 

# Settings 
getcontext().prec = 1 
getcontext().rounding = ROUND_UP 

print Decimal(factor) 

Python: 1,372549019607843145962533526471816003322601318359375

Ожидаемое и хотел результат: 1,4

+0

использовать 'np.round'. – Julien

+0

Простое создание объекта «Десятичный» не округляется до текущего контекста. Для этого есть трюк: вы можете применить унарный плюс, как в '+ Decimal (factor)'. Сказав это, это все равно не будет делать то, что вы хотите: 'prec' означает общее количество значимых цифр, а не количество мест после точки. Поэтому в этом случае вам нужно «prec = 2». –

+0

Вы также можете посмотреть в методе 'Десятичный.quantize'. –

ответ

0

Из Python Документация: (https://docs.python.org/2/library/decimal.html)

Значение нового Decimal определяется только числом ввод цифр. Контекстная точность и округление только входят в игру во время арифметических операций.

getcontext().prec = 6 
Decimal('3.0') 
Decimal('3.0') 
Decimal('3.1415926535') 
Decimal('3.1415926535') 
Decimal('3.1415926535') + Decimal('2.7182818285') 
Decimal('5.85987') 
getcontext().rounding = ROUND_UP 
Decimal('3.1415926535') + Decimal('2.7182818285') 
Decimal('5.85988') 

так что вам нужно использовать десятичную дробную операцию, а не при печати.

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