Python: вывод числа с разбиением на триады
Необходимо вывести число с разделением на триады. Красивого решения я не нашел. Вот вариант, который выдается за лучшее решение:
a = 300_000_000
b = 27.6
c = a/b
print('{:,}'.format(c))
Результат вывода: 10,869,565.217391305
Вопрос. Можно ли сформатировать число так, чтобы триады были разделены разделителем и количество цифр после точки было наперед задано? Например, две:
10,869,565.21
Ответы (3 шт):
print(f'{c:,.2f}'.replace(',', ' '))
10 849 909.58
И, если надо пробелы, то можно так. Спасибо, вполне в стиле питона.
Существует управляющий форматом символ n, который выводит число в формате текущей локали. Это самый верный способ, так как все пользователи увидят с теми разделителями, которые приняты в их стране.
import locale
locale.setlocale(locale.LC_ALL, "ru_RU.UTF-8")
numint = 200_000_000
print(f'{numint:n}')
Вывод:
200 000 000
С float могут быть проблемы, так как для больших чисел выведется экспоненциальная форма. В этом случае можно использовать locale.format_string:
print(locale.format_string('%.2f', numint, grouping=True))
Вывод:
200 000 000,00
Если нужен какой-то определённый формат вывода, подберите нужную локаль и установите не locale.LC_ALL, а locale.LC_NUMERIC. Это не повлияет на обычный вывод чисел, будет работать только с функциями модуля locale.
В большинстве случаев это правильнее, чем использовать replace.