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