Когда я выводю некоторые из моих двойных переменных, они записываются в экспоненциальной форме с использованием 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)