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