PHPは、それがjson_encodeで小数点以下の桁数を処理する方法にa bugを持っているようです。PHP 7.1.1でjson_encodeの値を浮動小数点化する方法は?
簡単なフロート符号化することで、単に見ることは簡単です:
echo json_encode(["testVal" => 0.830]);
// Prints out:
{"testVal":0.82999999999999996003197111349436454474925994873046875}
を私は、サーバー管理者の多くはないんだけど、その脇のphp.iniに入ると-1にserialize_precision
を変更するから、そこにありますその設定が変更された環境で実行されていることを確認できないときに私のコードでこれを防ぐためにできることは何ですか?
EDIT: 私はいくつかのコメントは、浮動小数点不正確が存在する理由の一般的な議論にリンクしたいと確信しています。そんなこと知ってる。ここで私の質問は、PHPでそれを扱うためのベストプラクティスと、それに対して防衛的にコーディングする方法があるかどうかについてです。確かに文字列として浮動小数点を送るよりも良い方法があります。
これは、同様に7.0で発生しますか? –
リンク先のバグレポートの説明が明確になるため、これはバグではなく意図的な機能です。サーバが浮動小数点数を高精度にシリアル化するように設定されている場合、 'json_encode'はこれを尊重します。 – IMSoP
そしてその値を文字列として書いたら?それからあなたはあなたが望む正確な数を持っています。 – Stony