Php 为什么sprintf使用类型说明符';f';不';不能正确格式化数字?

Php 为什么sprintf使用类型说明符';f';不';不能正确格式化数字?,php,localization,number-formatting,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\u ALL,'pl\u pl.UTF-8')设置。 然后sprintf('.2f',5.55)输出5,55(我在微软Windows上期望的值) 请给我解释一下这种奇怪的(

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

使用linux会发生不同的事情。语言环境由
setlocale(LC\u ALL,'pl\u pl.UTF-8')
设置。 然后sprintf('.2f',5.55)输出5,55(我在微软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\u ALL
,第二个参数应该是所希望的区域设置。

我犯了一个错误,写了一个问题,当然setlocale的第一个参数是LC\u ALL