PHP формат вывода с плавающей запятой - PullRequest
2 голосов
/ 19 сентября 2019

Я столкнулся с некоторым странным поведением в php, в какой-то момент PHP начал выводить значения с плавающей запятой вместо точки.

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

И, как и ожидалось, все скрипты отслеживания с числами с плавающей точкой из PHP(цены, QTY и т. д.) сейчас не работают.

Не найдено ни одной настройки php или apache для управления этим.Кто-нибудь встречал это раньше?И, может, знает, как это исправить / изменить?

PS Пробовал setlocale () для категорий LC_ALL и LC_NUMERIC, не работает.

Ответы [ 2 ]

2 голосов
/ 19 сентября 2019

Это из-за локализации.Начиная с 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 не может быть сброшена до значения по умолчанию.Не рекомендуется использовать это> значение по умолчанию, поскольку его действующее значение зависит от среды сервера.

Пример для Германия и США

Как видно из таблицы чисел:

Германия:

Шаблон чисел: #, ## 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
0 голосов
/ 19 сентября 2019

Вы можете использовать number_format, чтобы всегда содержать его в чистоте.

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

для получения дополнительной информации

...