Pie*_*mol 0 string casting decimal php-7
在 PHP 中,我发现当小数点被打印到屏幕上时(或者:当它被转换为字符串时),小数点分隔符也将被转换为逗号。但这是为什么呢?我还没有找到任何关于此的文档,我认为转换为字符串不会考虑国际化设置。
示例代码:
$var = 12.345;
var_dump($var); // Outputs: double(12.345)
var_dump((string)$var); // Outputs: string(6) "12,345"
var_dump(str_replace(',', '.', $var)); // Outputs: string(6) "12.345"
echo $var; // Outputs: 12,345
Run Code Online (Sandbox Code Playgroud)
是什么导致了这种行为?
这个问题适用于 PHP < 8。根据文档,
自 PHP 8.0.0 起,小数点字符始终为
.. 在 PHP 8.0.0 之前,小数点字符在脚本的语言环境(类别 LC_NUMERIC)中定义。请参阅 setlocale() 函数。
如果你阅读手册,或者用谷歌检查,你会发现这个。
小数点字符在脚本的语言环境中定义(类别 LC_NUMERIC)
现在,如果您想知道 sys 上设置的小数点是哪个:
print_r(localeconv());
Run Code Online (Sandbox Code Playgroud)
返回:
Array
(
[decimal_point] => .
[...many other confs...]
)
Run Code Online (Sandbox Code Playgroud)
如果你想设置它使用好的语言: setlocale(LC_NUMERIC, $language)
我曾经fr_FR得到一个逗号和en_US一个点。
你应该参考的setlocale()手册。
顺便说一句,我不知道如何在不更改整个LC_NUMERIC confsdecimal_point的localeconv()情况下直接设置返回的数组的键,如果有人知道,请编辑:)