質問

二重変数のいくつかを出力しているとき、それらは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)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top