PHP:为什么在转换为字符串时用十进制替换小数点?

时间:2015-05-05 12:04:11

标签: php string casting decimal

在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

导致此行为的原因是什么?

1 个答案:

答案 0 :(得分:2)

如果您阅读了手册,或通过Google查看,则会找到THIS

  

小数点字符在脚本的语言环境中定义   (类别LC_NUMERIC)

现在,如果你想知道sys上设置的小数点是哪个:

print_r(localeconv());

返回:

Array
(
    [decimal_point] => .
    [...many other confs...]
)

如果您想设置它,请使用优秀的语言:setlocale(LC_NUMERIC, $language)

我使用fr_FR获取逗号,en_US使用逗号。

您应该参考the setlocale() manual

顺便说一下,我不知道如何直接设置decimal_point返回的数组的localeconv()键而不更改整个LC_NUMERIC配置文件,如果有人知道,请编辑:)