为什么使用类型说明符'f'的sprintf没有正确格式化数字?

时间:2013-10-24 10:19:27

标签: php localization number-formatting

发生了什么: 我将MS Windows语言环境设置为“Polish_Poland.1250”(使用setlocale(LC_ALL, "polish_poland"))。 然后我使用sprintf('%.2f',5.55),预期输出 5,55 ,但我得到 5.55

使用 linux 会发生不同的事情。区域设置由setlocale(LC_ALL, 'pl_PL.UTF-8')设置。 然后sprintf('%。2f',5.55)输出 5,55 (我在MS Windows上期待的值)。

请解释我这种奇怪的(错误的?)行为。

编辑:这是我的应用设置区域设置的方式

    if($os==='windows')
    {
        putenv('LANG=polish.UTF8');
        putenv('LANGUAGE=polish.UTF8');

        bind_textdomain_codeset($_SERVER['HTTP_HOST'], 'UTF8');
        $debug = setlocale(LC_ALL, Cms_Aplikacja::$config['LC_WINDOWS']);
    }
    else if($os==='linux')
    {
        $debug = setlocale(LC_ALL, Cms_Aplikacja::$config['LC_LINUX']);
    }

1 个答案:

答案 0 :(得分:0)

setlocale()的第一个参数应该是LC_ALL,第二个参数应该是希望的语言环境。