【问题标题】:why sprintf using type specifier 'f' doesn't properly format number?为什么使用类型说明符“f”的 sprintf 不能正确格式化数字?
【发布时间】:2013-11-02 23:58:07
【问题描述】:

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

【问题讨论】:

    标签: php localization number-formatting


    【解决方案1】:

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

    【讨论】:

    • 我写错了,写问题,当然setlocale的第一个参数是LC_ALL
    猜你喜欢
    • 2021-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-20
    相关资源
    最近更新 更多