PHP, выводящий числа в экспоненциальной форме

Когда я выводю некоторые из моих двойных переменных, они записываются в экспоненциальной форме с использованием fwrite. Могу ли я установить некоторые значения по умолчанию в PHP, где всякий раз, когда переменная отображается (копируется или сохраняется), она всегда происходит в десятичном формате?

Если быть точным, проблема возникает, когда я использую метод json_decode для строки json, которая содержит двойное значение (которое не находится в экспоненциальной форме). Это двойное значение после преобразования объекта становится экспоненциальным.

Предполагая, что числа все еще плавают при написании (в отличие от строк), это один из способов сделать это:

echo rtrim(sprintf("%0.15f", $x), "0."); 

Я не уверен, есть ли более чистый способ или нет. Но в основном это использует sprintf для печати максимум 15 знаков после запятой, а затем отключает любые конечные 0 или . символы. (Конечно, нет никакой гарантии, что все будет хорошо округлено с завершающими нулями, как вы могли бы ожидать.)

Если вам нужен только фиксированный размер, вы можете настроить 15 и удалить rtrim .

У меня была аналогичная проблема, когда json_decode конвертировал последние идентификаторы твиттера / твита в экспоненциальные числа.

Я решил это, повышая точность поплавка PHP, что можно сделать несколькими разными способами …

  • найдите значение precision в вашем php.ini и измените его на precision = 20
  • добавьте ini_set('precision', 20); к вашему PHP-приложению
  • добавьте php_value precision 20 в файл .htaccess или файл виртуального хоста вашего приложения.

В противном случае, если вы в порядке с преобразованием BIGINT в строку, и у вас есть PHP 5.3+, вы также можете передать флаг json_decode так: json_decode($json, true, 512, JSON_BIGINT_AS_STRING)