Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 21, 2014 14:35:39

SLaVeRS9
От: Москва
Зарегистрирован: 2014-02-07
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

decimal.Decimal

Не могу понять, почему в записи

decimal.getcontext().prec = 2
pay = decimal.Decimal(str(1999 + 1.33))
присутствует преобразование в строку str

Если убрать str, то результат будет с кучей цифр после запятой.
Почему так?

Офлайн

#2 Фев. 21, 2014 15:55:54

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

decimal.Decimal

decimal.getcontext().prec = 6
pay = decimal.Decimal(1999) + decimal.Decimal(1.33)



————————————————
-*- Simple is better than complex -*-

Отредактировано terabayt (Фев. 21, 2014 15:56:57)

Офлайн

#3 Фев. 21, 2014 16:32:40

PanovSergey
От: Екатеринбург
Зарегистрирован: 2013-12-29
Сообщения: 269
Репутация: +  19  -
Профиль   Адрес электронной почты  

decimal.Decimal

SLaVeRS9
Если убрать str, то результат будет с кучей цифр после запятой.
Почему так?
Потому что Decimal в отличии от float точный тип. Дробь.
Со str вы говорите конструктору создай мне Decimal точно равный 2000.33, без создай мне Decimal равный float(2000.33) вот и получается разница. Счас люди грамотные придут понятнее объяснят

Отредактировано PanovSergey (Фев. 21, 2014 16:33:07)

Офлайн

#4 Фев. 21, 2014 19:13:07

SLaVeRS9
От: Москва
Зарегистрирован: 2014-02-07
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

decimal.Decimal

terabayt
Спасибо, но такую форму записи, как привели Вы, я знаю. Интересовал только ответ на конкретный вопрос)

Офлайн

#5 Фев. 21, 2014 19:15:34

SLaVeRS9
От: Москва
Зарегистрирован: 2014-02-07
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

decimal.Decimal

PanovSergey
Как я понимаю, со str он приводит ответ как строку?
Но ведь я изначально выше ограничиваю число до двух знаков после запятой:
decimal.getcontext().prec = 2
Почему тогда запись
pay = decimal.Decimal(1999 + 1.33) не будет соблюдать это условие?

Офлайн

#6 Фев. 21, 2014 19:47:20

PanovSergey
От: Екатеринбург
Зарегистрирован: 2013-12-29
Сообщения: 269
Репутация: +  19  -
Профиль   Адрес электронной почты  

decimal.Decimal

SLaVeRS9
Почему тогда запись…
The context for arithmetic is an environment specifying precision
Потому что выполнение идет не в Decimal а в float. Т.е. контекст действует только для операций по Decimal. Если хотите округлить есть метод quantize.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version