我的测试脚本从设置一些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"的预期结果
小智 6
像以前一样设置你的语言环境,但重置小数分隔符可能有这种情况,你可能需要设置语言环境(即使我不知道什么时候这应该是必须的).如果是这样,您可以在设置已设置的语言环境后重置小数点分隔符:
<?php
setlocale(LC_ALL, "de_DE");
setlocale(LC_NUMERIC, 'C');
?>
这个重置为'C'语言环境的数值告诉操作系统和PHP,必须使用C/C++类型的小数分隔符,定义为'.' 用于编程语言.现在,如果您正在使用普通的PHP date()函数,那么您将获得基于区域设置的月份名称,但是您也可以获得正确的计算和转换数值(但是您将丢失已知的十进制sep char语言环境).