Это немного Hacky, но:
format(12345678.46, ',').replace(',', ' ').replace('.', ',')
Как описано в Format specification mini-language, в format_spec:
«» параметр сигнализирует использование запятой для разделителя тысяч.
Затем мы просто заменяем каждую запятую пробелом, затем десятичной точкой с запятой, и все готово.
Для более сложных случаев с использованием str.format
вместо format
, то format_spec идет после двоеточия, как:
'{:,}'.format(12345678.46)
См PEP 378 подробности.
Между тем, если вы просто пытаетесь использовать стандартную группировку и сепараторы для локали вашей системы, есть более простые способы сделать это-тип формата n
или функция locale.format
и т.д. Например:
>>> locale.setlocale(locale.LC_NUMERIC, 'pl_PL')
>>> format(12345678, 'n')
12 345 678
>>> locale.format('%.2f' 12345678.12, grouping=True)
12 345 678,46
>>> locale.setlocale(locale.LC_NUMERIC, 'fr_FR')
>>> locale.format('%.2f' 12345678.12, grouping=True)
12345678,46
>>> locale.setlocale(locale.LC_ALL, 'en_AU')
>>> locale.format('%.2f' 12345678.12, grouping=True)
12,345,678.46
Если ваша система локалите, скажем, pl_PL
, просто звонит locale.setlocale(locale.LC_NUMERIC)
(или locale.setlocale(locale.LC_ALL)
) подберут польские настройки, которые вы хотите, но тот же человек работает вашу программу в Австралии подберет Австралию настройки, он хочет.
насчет ' '12345678,46123''? –
@AshwiniChaudhary: Обычно люди не ставят разделители тысяч после десятичной точки.По крайней мере, форматирование PEP 378 не работает, и ни один LC_NUMERIC я не могу выкопать. – abarnert
Попробуйте сделать пробелы с 'end' не с начала – Zaffy