PHP выводит числа в экспоненциальной форме - PullRequest
3 голосов
/ 05 декабря 2010

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

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

Ответы [ 2 ]

3 голосов
/ 12 ноября 2011

У меня была похожая проблема, когда 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)

3 голосов
/ 05 декабря 2010

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...