На этом шаге мы рассмотрим различные способы форматирования чисел.
Вам нужно отформатировать число для вывода, контролируя количество знаков, выравнивание, включение разделителя для разрядов и т. д.
Чтобы отформатировать одно число для вывода, используйте встроенную функцию format(). Например:
>>> x = 1234.56789 >>> # Два десятичных знака точности >>> format(x, '0.2f') '1234.57' >>> # Выравнивание по правому краю в 10 символов, один знак точности >>> format(x, '>10.1f') ' 1234.6' >>> # Выравнивание по левому краю >>> format(x, '<10.1f') '1234.6 ' >>> # Выравнивание по центру >>> format(x, '^10.1f') ' 1234.6 ' >>> # Включение разделителя разрядов >>> format(x, ',') '1,234.56789' >>> format(x, '0,.1f') '1,234.6' >>>
Если вы хотите использовать экспоненциальную нотацию, измените f на e или E (в зависимости от регистра, который вы хотите использовать для обозначения экспоненты). Например:
>>> format(x, 'e') '1.234568e+03' >>> format(x, '0.2E') '1.23E+03' >>>
Общая форма ширины и точности в обоих случаях такова: '[<>^]?width[,]?(.digits)?', где width и digits - целые числа, а ? обозначает необязательные части. Тот же формат используется в строковом методе format(). Например:
>>> 'The value is {:0,.2f}'.format(x) 'The value is 1,234.57' >>>
Форматирование чисел для вывода обычно вполне бесхитростно. Прием, показанный выше, работает и для чисел с плавающей точкой, и для экземпляров Decimal из модуля decimal.
Когда количество знаков ограничено, значения округляются таким же образом, как и при использовании функции round(). Например:
>>> x 1234.56789 >>> format(x, '0.1f') '1234.6' >>> format(-x, '0.1f') '-1234.6' >>>
Обычное форматирование значений с добавлением разделителя разрядов ничего не знает о принятых в конкретных странах традициях форматирования тысячных разрядов. Если вам нужно принять во внимание эти традиции, обратите внимание на функции модуля locale. Вы также можете заменить символ разделителя разрядов, используя строковый метод translate(). Например:
>>> swap_separators = {ord('.'):',', ord(','):'.'}
>>> format(x, ',').translate(swap_separators)
'1.234,56789'
>>>
В мире все еще очень много кода, использующего форматирование чисел на основе оператора %. Например:
>>> '%0.2f' % x '1234.57' >>> '%10.1f' % x ' 1234.6' >>> '%-10.1f' % x '1234.6 ' >>>
Это форматирование все еще приемлемо, но обладает меньшими возможностями, нежели современный метод format(). Например, форматирование с помощью оператора % не поддерживает добавление разделителя разрядов.
На следующем шаге мы рассмотрим работу с бинарными, восьмеричными и шестнадцатеричными целыми числами.