У меня есть некоторые списки и более сложные структуры, содержащие плавания. При печати их я вижу плавания с большим количеством десятичных цифр, но при печати, мне не нужны все они. Таким образом, я хотел бы определить пользовательский формат (например, 2 или 3 десятичных числа), когда плавания печатаются.
Я должен использовать плавания и не Десятичный. Кроме того, меня не разрешают усеченным/круглым плаваниям.
Существует ли способ изменить поведение по умолчанию?
Вам не разрешено использовать monkeypatch для типов C, как сказал Игнасио.
Однако, если вам это очень тяжело и вы немного знаете C, вы можете самостоятельно изменить исходный код интерпретатора Python, а затем перекомпилировать его в собственное решение. Однажды я изменил одно из стандартных поведений для списков, и это было лишь умеренной болью.
Я предлагаю вам найти лучшее решение, например, просто распечатать числа с плавающей запятой с помощью записи "% 0.2f"
printf:
for item in mylist:
print '%0.2f' % item,
или
print " ".join('%0.2f' % item for item in mylist)
Нет, потому что для этого потребуется изменить float .__ str __ ()
, но вам не разрешено использовать monkeypatch для типов C. Вместо этого используйте интерполяцию или форматирование строк.
>>> a = 0.1
>>> a
0.10000000000000001
>>> print a
0.1
>>> print "%0.3f" % a
0.100
>>>
Из документов Python , repr (a)
даст 17 цифр (как видно, просто набрав a
на интерактивная подсказка, но str (a)
(автоматически выполняется при печати) округляется до 12.
Изменить: самое простое решение для взлома ... Вы должны использовать свой собственный класс, так что ... да.
>>> class myfloat(float):
... def __str__(self):
... return "%0.3f" % self.real
>>> b = myfloat(0.1)
>>> print repr(b)
0.10000000000000001
>>> print b
0.100
>>>
Обновитесь до Python 3.1. Он не использует больше цифр, чем необходимо.
Python 3.1.2 (r312:79147, Apr 15 2010, 15:35:48)
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 0.1
0.1