質問
二重変数のいくつかを出力しているとき、それらはFWRITEを使用して指数形式で書かれています。変数が表示される(コピーまたは保存されている)ときはいつでも小数形式で発生する場合、PHPでいくつかのデフォルトを設定できますか?
正確に言うと、問題は、二重値(指数形式ではない)を含むJSON文字列でjson_decodeメソッドを使用するときに発生します。 ANオブジェクトを変換した後のその二重値は指数になります。
解決
(文字列とは対照的に)書かれているときに数字がまだ浮かんでいると仮定すると、これはそれを行う1つの方法です。
echo rtrim(sprintf("%0.15f", $x), "0.");
よりクリーンな方法があるかどうかはわかりません。しかし、基本的にこれは使用します sprintf
最大15桁の場所を印刷してから、任意のトレーニングをトリミングします 0
また .
chars。 (もちろん、予想されるように、すべてが後続のゼロでうまく丸くなるという保証はありません。)
固定サイズが必要な場合は、 15
を削除します rtrim
.
他のヒント
同様の問題がありました json_decode
最近のTwitter/Tweet IDを指数番号に変換していました。
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)
所属していません StackOverflow