python locale - неправильная десятичная_точка для немецких (de_DE) настроек

Я получаю неправильный десятичный разделитель в этой локали. пример короткого кода:

import locale
print locale.getdefaultlocale()[0]
print "decimal_point:", locale.localeconv()["decimal_point"]
print (float(1)/float(2))

результаты:

de_DE
decimal_point: .
0.5

(десятичный разделитель — точка вместо запятой). Питон 2.7


person Guy Dafny    schedule 26.08.2014    source источник


Ответы (1)


Вам нужно позвонить locale.setlocale(locale.LC_ALL, ''). Как указано в документах:

Согласно POSIX, программа, которая не вызвала setlocale(LC_ALL, ''), запускается с использованием переносимой локали 'C'. Вызов setlocale(LC_ALL, '') позволяет использовать локаль по умолчанию, определенную переменной LANG. Поскольку мы не хотим вмешиваться в текущую настройку локали, мы эмулируем поведение, как описано выше.

person aecolley    schedule 26.08.2014
comment
Tnx много, но это решило только половину проблемы. десятичная_точка получила запятую, но число отображается как 0,5 (ноль точка пять) вместо 0,5 (ноль запятая пять). - person Guy Dafny; 26.08.2014
comment
Да, потому что str() не знает локали, как выразился PEP 331. Чтобы получить правильный числовой формат, вы должны использовать функции формата в модуле locale. - person aecolley; 26.08.2014
comment
Tnx снова, мне это не нравится, но похоже, что это питонический путь :-) - person Guy Dafny; 26.08.2014