【问题标题】:PHP float output formatPHP浮点输出格式
【发布时间】:2020-01-20 10:54:53
【问题描述】:

我在 php 中遇到了一些奇怪的行为,在某些时候 PHP 开始用逗号而不是点输出浮点值。

<?php
echo 12.3;
//outputs "12,3" to both browser and CLI

而且,正如预期的那样,所有带有来自 PHP 的浮点数(价格、数量等)的跟踪脚本现在都无法正常工作。

还没有找到任何 php 或 apache 设置来控制它。有没有人遇到过这个?也许知道如何修复/改变它?

附:尝试了 LC_ALL 和 LC_NUMERIC 类别的 setlocale(),不起作用。

【问题讨论】:

  • echo number_format(12.3,2, ',', ',' )
  • @Gulshan 知道这一点,谢谢,但我需要找到原因并修复错误的输出。
  • 您是否“按原样”运行此脚本并看到此问题??
  • 看看this
  • @JayWadhwa 是的,在 CLI 的情况下它的命令 php -r "echo 1.23;"

标签: php apache output command-line-interface number-formatting


【解决方案1】:

这是因为本地化。从 PHP 5.3.0 开始,您的 php.ini 中有一个 intl.default_locale 选项。当您将其更改为使用您想要的符号的国家/地区时应该可以工作。

来自php.net的解释:

在没有指定时将在 intl 函数中使用的语言环境(通过 >省略相应的参数或通过传递 NULL)。这些是 ICU 语言环境,而不是 > 系统语言环境。内置 ICU 语言环境及其数据可以在 » >http://demo.icu-project.org/icu-bin/locexp 进行探索。

默认值为空,强制使用 ICU 的默认语言环境。一旦设置,>ini 设置无法重置为此默认值。不建议依赖这个>default,因为它的有效值取决于服务器的环境。

GermanyUSA 的示例

如您在数字表下所见:

德国:

数字模式:#,##0.### 1.234,56

美国:

数字模式:#,##0.### 1,234.56

编辑:

...因为它的有效值取决于服务器的环境。

这意味着您必须更改服务器环境中的本地。只有在没有设置本地服务器时才使用php.ini的设置值。

对于 Linux:

如果您想更改或设置系统本地,请使用update-locale 程序。 LANG 变量允许您为整个系统设置语言环境。

以下命令将LANG 设置为en_US.ISO8859-1 并删除LANGUAGE 的定义。

$ sudo update-locale LANG=LANG=en_US.ISO8859-1 LANGUAGE
OR
$ sudo localectl set-locale LANG=en_US.ISO8859-1

您可以在以下文件中找到全局区域设置:

  • /etc/default/locale – 在 Ubuntu/Debian 上
  • /etc/locale.conf – 在 CentOS/RHEL 上

【讨论】:

  • intl.default_locale 为“Null”,尝试“en_US”,无效
  • 您是否编辑了正确的 .ini 文件?您可以将您的 php.ini 值打印到 php 文件并仔细检查吗?
  • 是的,我检查了 phpinfo(),intl.default_locale 的本地值和主值都等于“en_US”
  • 您使用的是哪个操作系统?
  • Ubuntu(mint 19.2)
【解决方案2】:

您可以使用number_format 始终保持清洁。

number_format(12.20, 2, '.') : string

for more

【讨论】:

  • 我知道了,谢谢,但我需要找到原因并修复错误的输出。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-23
相关资源
最近更新 更多