0

在 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

是什么导致了这种行为?


这个问题适用于 PHP < 8。根据文档

自 PHP 8.0.0 起,小数点字符始终为.. 在 PHP 8.0.0 之前,小数点字符在脚本的语言环境中定义(类别 LC_NUMERIC)。请参阅 setlocale() 函数。

4

1 回答 1

5

如果您阅读手册,或通过 google 查询,您会发现THIS

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

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

print_r(localeconv());

哪个返回:

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

如果你想设置它使用好的语言:setlocale(LC_NUMERIC, $language)

我曾经fr_FR得到一个逗号和en_US一个点。

你应该参考手册setlocale()

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

于 2015-05-05T12:22:51.850 回答