[Python 3.1]подклассы поплавка, чтобы заставить точность неподвижной точки печати в питоне
Я следую на this answer:
class prettyfloat(float):
def __repr__(self):
return "%0.2f" % self
Я знаю, что нужно следить за своими флоят литералы (т.е. заменить 3.0
на prettyfloat(3.0)
и т. д.), и все в порядке.
Но всякий раз, когда я делаю какие-либо расчеты, prettyfloat
объекты преобразуются в float
.
Какой самый простой способ исправить это?
EDIT:
мне нужно ровно два десятичных цифр; и мне нужно это во всем коде, в том числе, где я печатаю словарь с float
значениями внутри. Это затрудняет использование любых функций форматирования.
Я не могу использовать глобальную настройку Decimal
, так как я хочу, чтобы вычисления были на полной точности (только печать в 2 десятичных точках).
@Glenn Maynard: Я согласен, что я не должен переопределять __repr__
; если угодно, это будет всего лишь __str__
. Но это спорный вопрос из-за следующего пункта.
@Glenn Maynard и @singularity: я не буду подкласса float
, так как я согласен, это будет выглядеть очень уродливо в конце.
Я перестану пытаться быть умным и просто вызывать функцию везде, где печатается float
. Хотя мне очень грустно, что я не могу переопределить __str__
во встроенном классе float
.
Спасибо!
Простейшим способом форматирования может быть использование 'decimal.Decimal'. Что в этом плохого? –
Я еще не видел случай, когда подклассификация типа ядра типа 'float' - это правильная вещь. –
@ S.Lott Мне нужно ровно две десятичные цифры; и мне нужно это во всем коде, в том числе, где я печатаю словарь со значениями float внутри. @Glenn Maynard У меня также нет большой надежды :(Просто подумал, может быть, есть чистый способ заставить его работать. – max