Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > проблема sprintf под mod_perl


Автор: myth777 22.12.2010, 14:14
Перевели сайт на mod_perl вобщем sprintf("%.2f",100) выдает 100,00 
а хотелось бы чтоб выдавал 100.00
почему вместо точки выводиться запятая? и что делать?

Автор: sir_nuf_nuf 22.12.2010, 14:23
проблема с локалью.
Вывод чисел с плавающей точкой зависит от текущей локали.


Решение:
1) Узнайте какая локаль установлена:
Код

use POSIX qw(:locale_h);
print setlocale(LC_ALL);


2) Установите нужную вам локаль
Код

setlocale(LC_ALL, 'ru_RU.CP1251'); # например

Автор: myth777 22.12.2010, 14:35
Это выводит на отладочном сервере, где всё работает
LC_CTYPE=ru_RU.utf8;LC_NUMERIC=C;LC_TIME=ru_RU.utf8;LC_COLLATE=ru_RU.utf8;LC_MONETARY=ru_RU.utf8;LC_MESSAGES=ru_RU.utf8;LC_PAPER=ru_RU.utf8;LC_NAME=ru_RU.utf8;LC_ADDRESS=ru_RU.utf8;LC_TELEPHONE=ru_RU.utf8;LC_MEASUREMENT=ru_RU.utf8;LC_IDENTIFICATION=ru_RU.utf8

а  ru_RU.KOI8-R это на конечном, где нихрена не работает....

Это надо конфиг апачевский как то настраивать?

Автор: ginnie 23.12.2010, 13:03
myth777, для того, чтобы выводилась точка я использую

Код

setlocale(LC_NUMERIC, 'en_US.ISO8859-1');


Автор: myth777 23.12.2010, 15:27
в стартовом скрипте из апача(PerlRequire) я сделал

BEGIN {  $ENV{"LC_ALL"}='C';};

и все везде заработатло.

всем спасибо!

Добавлено через 7 минут и 14 секунд
ну да, достаточно LC_NUMMERIC было просто установить в "с" 
 BEGIN { $ENV{"LC_NUMERIC"}='C';};

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)