double 変数の一部を出力しているとき、それらは fwrite を使用して指数形式で書き込まれています。変数が表示 (コピーまたは保存) されるたびに常に 10 進形式で表示されるように、PHP でいくつかのデフォルトを設定できますか?
正確には、double 値 (指数形式ではない) を含む json 文字列に対して json_decode メソッドを使用すると、問題が発生します。オブジェクトを変換した後の double 値は指数関数になります。
double 変数の一部を出力しているとき、それらは fwrite を使用して指数形式で書き込まれています。変数が表示 (コピーまたは保存) されるたびに常に 10 進形式で表示されるように、PHP でいくつかのデフォルトを設定できますか?
正確には、double 値 (指数形式ではない) を含む json 文字列に対して json_decode メソッドを使用すると、問題が発生します。オブジェクトを変換した後の double 値は指数関数になります。
json_decode
最近のツイッター/ツイートIDを指数に変換するという同様の問題がありました。
PHPの浮動小数点精度を上げることで解決しましたが、これはいくつかの方法で行うことができます...
precision
php.ini で値を見つけて、次のように変更します。precision = 20
ini_set('precision', 20);
PHP アプリに追加するphp_value precision 20
アプリの .htaccess または仮想ホスト ファイルに追加しますそれ以外の場合、文字列に変換しても問題なく、PHP 5.3 以降を使用している場合は、次のようBIGINT
にフラグを渡すこともできます。json_decode
json_decode($json, true, 512, JSON_BIGINT_AS_STRING)
(文字列ではなく)書き込まれるときに数値がまだ浮動であると仮定すると、これはそれを行う1つの方法です。
echo rtrim(sprintf("%0.15f", $x), "0.");
よりクリーンな方法があるかどうかはわかりません。ただし、基本的にこれはsprintf
、小数点以下15桁までを印刷し、末尾0
または.
文字を削除するために使用します。(もちろん、すべてが末尾のゼロでうまく丸められるという保証はありません。)
固定サイズが必要な場合は、を調整し15
て削除できますrtrim
。