4

double 変数の一部を出力しているとき、それらは fwrite を使用して指数形式で書き込まれています。変数が表示 (コピーまたは保存) されるたびに常に 10 進形式で表示されるように、PHP でいくつかのデフォルトを設定できますか?

正確には、double 値 (指数形式ではない) を含む json 文字列に対して json_decode メソッドを使用すると、問題が発生します。オブジェクトを変換した後の double 値は指数関数になります。

4

2 に答える 2

4

json_decode最近のツイッター/ツイートIDを指数に変換するという同様の問題がありました。

PHPの浮動小数点精度を上げることで解決しましたが、これはいくつかの方法で行うことができます...

  • precisionphp.ini で値を見つけて、次のように変更します。precision = 20
  • ini_set('precision', 20);PHP アプリに追加する
  • php_value precision 20アプリの .htaccess または仮想ホスト ファイルに追加します

それ以外の場合、文字列に変換しても問題なく、PHP 5.3 以降を使用している場合は、次のようBIGINTにフラグを渡すこともできます。json_decodejson_decode($json, true, 512, JSON_BIGINT_AS_STRING)

于 2011-11-12T17:11:56.420 に答える
3

(文字列ではなく)書き込まれるときに数値がまだ浮動であると仮定すると、これはそれを行う1つの方法です。

echo rtrim(sprintf("%0.15f", $x), "0.");

よりクリーンな方法があるかどうかはわかりません。ただし、基本的にこれはsprintf、小数点以下15桁までを印刷し、末尾0または.文字を削除するために使用します。(もちろん、すべてが末尾のゼロでうまく丸められるという保証はありません。)

固定サイズが必要な場合は、を調整し15て削除できますrtrim

于 2010-12-04T22:45:50.827 に答える