PHP:依赖于语言环境的浮点数转换为字符串

Tre*_*ecj 8 php string locale casting

我坐在一台带有en_US语言环境和这段PHP代码的机器上

setlocale(LC_ALL,'de_DE.utf8');
var_dump((string)1.234);
Run Code Online (Sandbox Code Playgroud)

回报

string(5) "1.234"
Run Code Online (Sandbox Code Playgroud)

而在我的同事的机器上有德国语言环境,它会返回

string(5) "1,234"
Run Code Online (Sandbox Code Playgroud)

为什么PHP在使用类型转换浮点到字符串时使用语言环境?我该如何禁用它?我希望在所有机器上都能使用此函数返回字符串(5)"1.234",而不管任何语言环境设置.

其次,不太重要:为什么PHP会忽略我机器上的setlocale?

Pao*_*olo 5

为什么 PHP 在将浮点数转换为字符串时会使用语言环境?

这就是它的行为

我怎样才能禁用它?

你不能(据我所知)。

你可以设置语言环境en_US,如果你已经现场安装。

我想让这个函数在所有机器上返回 string(5) "1.234",而不管任何语言环境设置。

您有两个选择:

1) number_format(1.234, 3, '.', '');

2) sprintf('%.3F', 1.234);

在这两种情况下,您都必须指定所需的十进制数字。

在第二种情况下,您可能不指定它们并获得默认值 6。

如果您不想要尾随零,您可以使用trim它们。

其次,不太重要:为什么 PHP 会忽略我机器上的 setlocale?

正如DevZer0评论的那样,您可能没有安装语言环境。

  • 您可以使用 setlocale(LC_NUMERIC, 'C') 将语言环境设置为 C,而不是 `en_US`。这应该适用于每个系统以获得独立于语言的“默认”行为。 (3认同)