【问题标题】:PHP: locale-dependent float to string castPHP:依赖于语言环境的浮点到字符串转换
【发布时间】:2013-07-11 07:34:50
【问题描述】:

我正在使用 en_US 语言环境和这段 PHP 代码的机器上

setlocale(LC_ALL,'de_DE.utf8');
var_dump((string)1.234);

返回

string(5) "1.234"

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

string(5) "1,234"

为什么 PHP 在将浮点类型转换为字符串时使用语言环境?我怎样才能禁用它?我想让这个函数在所有机器上返回 string(5) "1.234",不管任何区域设置。

第二个不太重要的问题:为什么 PHP 会忽略我机器上的 setlocale?

【问题讨论】:

  • 它不会忽略 setlocale,您必须安装 locale,(在 windows 中不起作用)检查 setlocale 的返回值,如果它为 FALSE,那么您没有 locale。
  • @DevZer0.. 对,我猜它只是没有安装在我的机器上......
  • php.net/setlocale 有一个返回值,您没有在问题代码中检查它,因此我们无法告诉您区域设置是成功还是被忽略。

标签: php string casting locale


【解决方案1】:

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

这是它的行为

如何禁用它?

你不能(据我所知)。

如果您安装了 locale,您可以将 locale 设置为 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。这应该适用于每个系统,以获得独立于语言的“默认”行为。
猜你喜欢
  • 2022-01-26
  • 1970-01-01
  • 1970-01-01
  • 2013-01-03
  • 1970-01-01
  • 1970-01-01
  • 2016-05-02
  • 1970-01-01
  • 2021-01-27
相关资源
最近更新 更多