Обновление: ответы пока показывают, что это похоже на связанную с платформой ошибку в OSX, которая связана с конкретными настройками локали, поскольку они не полностью поддерживают группировку чисел.
Обновление 2: Я только что открыл проблему в Python. Посмотрим, есть ли решение этой проблемы.
Я хочу форматировать целочисленные и плавающие числа в соответствии с немецким соглашением о нумерации. Это возможно с использованием языка форматирования и типа презентации n
, но сбой на моей платформе.
- Платформа: OS X 10.8.2 (Горный лев)
- Python: 2.7.3 64-бит
(v2.7.3:70274d53c1dd, Apr 9 2012, 20:52:43) [GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Примеры:
-
1234
= >1.234
-
1234.56
= >1.234,56
-
1000000
= >1.000.000
То, что я пробовал до сих пор:
-
Настройка немецкого языка
import locale locale.setlocale(locale.LC_ALL, 'de_DE')
-
Опция спецификации формата
,
распознает только английский формат.'{:,}'.format(1234) '1,234' '{:,}'.format(1234.56) '1,234.56' '{:,}'.format(1000000) '1,000,000'
-
В соответствии с документами Python, тип представления integer и float
n
должен делать то, что я хочу, но это doesn "т.'{:n}'.format(1234) '1234' '{:n}'.format(1234.56) '1234,56' # at least the comma was set correctly here '{:n}'.format(1000000) '1000000' '{:n}'.format(12345769.56) '1,23458e+07' # it doing weird things for large floats
-
Еще несколько примеров и сравнений, вдохновленных @J.S.Sebastian:
for n in [1234, 1234.56, 1000000, 12345769.56]: print('{0:,} {0:n}'.format(n)) fmt, val = "%d %f", (n, n) print(fmt % val) print(locale.format_string(fmt, val)) print(locale.format_string(fmt, val, grouping=True)) print('-'*60)
Это дает следующие неправильные результаты на моей платформе:
1,234 1234 1234 1234.000000 1234 1234,000000 1234 1234,000000 ------------------------------------------------------------ 1,234.56 1234,56 1234 1234.560000 1234 1234,560000 1234 1234,560000 ------------------------------------------------------------ 1,000,000 1000000 1000000 1000000.000000 1000000 1000000,000000 1000000 1000000,000000 ------------------------------------------------------------ 12,345,769.56 1,23458e+07 12345769 12345769.560000 12345769 12345769,560000 12345769 12345769,560000 ------------------------------------------------------------
Правильные результаты, которые я не получаю, будут выглядеть так:
1,234 1.234 1234 1234.000000 1234 1234,000000 1.234 1.234,000000 ------------------------------------------------------------ 1,234.56 1.234,56 1234 1234.560000 1234 1234,560000 1.234 1.234,560000 ------------------------------------------------------------ 1,000,000 1.000.000 1000000 1000000.000000 1000000 1000000,000000 1.000.000 1.000.000,000000 ------------------------------------------------------------ 12,345,769.56 1,23458e+07 12345769 12345769.560000 12345769 12345769,560000 12.345.769 12.345.769,560000 ------------------------------------------------------------
У вас есть решение для меня, используя только формат? Есть ли способ обмануть настройки языка на моей платформе, чтобы принять группировку?