JSONObject
を使用して、サーバーからjson応答を読み取ります。サーバーは10進数を返します。通常の数字は問題ではありませんが、フォームの小数が0.00068
の場合に問題が発生します。 0.00068
のような数字は自動的にDouble
オブジェクトに格納されます。そのような数値を取得しようとすると、getDouble(index)
メソッドでdouble型にアクセスした場合でも、数値がgetString(index)
メソッドでdouble型であっても数値の "computerized scientific notation"が返されます。json.jarからJSONObjectを回避する方法は、10進数の文字列をdoubleに変換します。
double型の値を文字列に変換してみましたが、Double
をBigDecimal
に変換したときに、正の丸めが加えられているので、この型の値を削除しました。これは、スケーリングをBigDecimal.ROUND_CEILING
に設定している間は、セットを四捨五入することで無くすことができます。しかし、実際の値が小さな小数であり、小数点の後に6桁を超えないことをサーバーが保証しているので、元の値でスケーリングを望んでいません。
BigDecimal big = new BigDecimal(new Double(0.00680));
System.out.println(big.toPlainString()); //0.006799999999999999621136392846665330580435693264007568359375
System.out.println(big.setScale(15, BigDecimal.ROUND_DOWN)); //0.006799999999999
は、スケーリングせず数0.00680である、または私たちは、それぞれの数値クラスにしてJSONObject
解釈数字を防ぐことができますダブルの実際の文字列値を取得するいくつかの方法が存在する場合があります。
ありがとうございます。あなたが使用してJSONライブラリーとは無関係の
JSONObjectという名前のJSON Javaライブラリが2つあります。 org.json。*およびnet.sf.json。*。あなたが話しているのはどれですか? –
私はorg.json。*またはorg.json.JSONObjectを使用しています。 – Ameya