Значение по умолчанию изменения пускает в ход формат печати

У меня есть некоторые списки и более сложные структуры, содержащие плавания. При печати их я вижу плавания с большим количеством десятичных цифр, но при печати, мне не нужны все они. Таким образом, я хотел бы определить пользовательский формат (например, 2 или 3 десятичных числа), когда плавания печатаются.

Я должен использовать плавания и не Десятичный. Кроме того, меня не разрешают усеченным/круглым плаваниям.

Существует ли способ изменить поведение по умолчанию?

14
задан Mel 1 August 2017 в 12:05
поделиться

4 ответа

Вам не разрешено использовать monkeypatch для типов C, как сказал Игнасио.

Однако, если вам это очень тяжело и вы немного знаете C, вы можете самостоятельно изменить исходный код интерпретатора Python, а затем перекомпилировать его в собственное решение. Однажды я изменил одно из стандартных поведений для списков, и это было лишь умеренной болью.

Я предлагаю вам найти лучшее решение, например, просто распечатать числа с плавающей запятой с помощью записи "% 0.2f" printf:

for item in mylist:
    print '%0.2f' % item,

или

print " ".join('%0.2f' % item for item in mylist)
9
ответ дан 1 December 2019 в 13:32
поделиться

Нет, потому что для этого потребуется изменить float .__ str __ () , но вам не разрешено использовать monkeypatch для типов C. Вместо этого используйте интерполяцию или форматирование строк.

4
ответ дан 1 December 2019 в 13:32
поделиться
>>> 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
>>>
2
ответ дан 1 December 2019 в 13:32
поделиться

Обновитесь до 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
0
ответ дан 1 December 2019 в 13:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: