为什么使用类型说明符"F"的 Sprintf 不能正确格式化数字?



发生了什么:我将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']);
    }

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

最新更新