我该如何使用setlocale?设置LC_NUMERIC有时只能工作

 mobiledu2502928483 发布于 2023-02-09 10:43

我的测试脚本从设置一些LC_values开始

setlocale(LC_ALL, "sv_SE.utf8");
setlocale(LC_CTYPE, "sv_SE.utf8");
setlocale(LC_NUMERIC, "en_US.utf8");

然后我有一个延迟的循环存储3/2的结果:

$list = array();
$number = 3/2;

foreach(range(1, 1000) as $i)
{
    $key = (string) $number;

    if(!isset($list[$key]))
    {
        $list[$key] = 0;
    }

    $list[$key]++;

    usleep(100 * 1000);
}

结果是:

Array
(
   [1.5] => 997
   [1,5] => 3
) 

为什么0.3%使用","而不是"."?

为什么LC_NUMERIC不能保持我设定的值?

我该如何防止这种情况发生?

也试过strftime("%A"),瑞典只有6.6%

上面的测试是用apache-2.2.22和php-5.5.2完成的.

如果我从bash/cli运行测试,我得到1000"1.5"和1000"torsdag"的预期结果

1 个回答
  • 像以前一样设置你的语言环境,但重置小数分隔符可能有这种情况,你可能需要设置语言环境(即使我不知道什么时候这应该是必须的).如果是这样,您可以在设置已设置的语言环境后重置小数点分隔符:

    <?php
    setlocale(LC_ALL, "de_DE");
    setlocale(LC_NUMERIC, 'C');
    ?>
    

    这个重置为'C'语言环境的数值告诉操作系统和PHP,必须使用C/C++类型的小数分隔符,定义为'.' 用于编程语言.现在,如果您正在使用普通的PHP date()函数,那么您将获得基于区域设置的月份名称,但是您也可以获得正确的计算和转换数值(但是您将丢失已知的十进制sep char语言环境).

    2023-02-09 10:46 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有