9

いくつか持ってみましょうfloat f = 52.92;。実際、 のような値を保持します52.91999816894531。しかし、これらの重要でない数字を切り捨てるjson-stringを使用して、それをWebアプリに送信したいと思います。どうすればいいですか?

その結果、次の json 文字列を取得する必要があります。

{"price": 52.92}

私が使用するコード:

float f = 52.92;
JSONObject js_price = new JSONObject();
js_price.put("price", f);
Log.d("json", js_price.toString());

この醜いjsonを生成します:

{"price": 52.91999816894531}

また、"price"文字列ではなく、json の数値形式にする必要があります。

4

6 に答える 6

4

次のようなコンストラクターJSONObject(String json)を使用できるようです。

JSONObject js_price = JSONObject(String.format("{\"price\": %.2f}", f);

その後、このオブジェクトを使用して、他のjson関連のことを行うことができます...

于 2012-08-01T18:18:56.490 に答える
2

String.formatを使用してみてください

Log.d("json", String.format("%.2f", f));

編集:

フロートを使用する必要がありますか、それともダブルで試してみてください。

    double d = 52.92;
    JSONObject js_price = new JSONObject();
    js_price.put("price", d);
    Log.d("json", js_price.toString());
于 2012-08-01T17:21:17.310 に答える
1

AFAIK、あなたはそれを行うことはできませんJSONObject.

実際に文字列の書式設定ルールを使用する必要があるような正確な浮動小数点値52.92はないため、JSON エンコーダーにその値を引用符で囲まれた文字列ではなく数値として処理させることはできません。

あなたがしなければならないでしょう:

String json = String.format("{\"price\", %.2f }", f);

いずれにせよ、JSON がクライアントで読み戻されると、まだではなく、再び52.92になります52.91999816894531。つまり、JSON のサイズを少し節約するだけです。

もう 1 つの方法は、数値を 100 倍して整数として送信することです。ただし、クライアント側で分割すると取得できます52.91999...

このメソッドをサブクラス化JSONObjectしてオーバーライドすることもできます。

static public java.lang.String numberToString(java.lang.Number number)
于 2012-08-01T17:19:55.207 に答える
0

このユーティリティ クラスを独自のパラメータで使用します。

public class BigDecimalUtils {

    /**
     * <code>MathContext</code> with precision 10 for coordinates.
     */
    private final static MathContext MC = new MathContext(10);

    /** Scale for coordinates. */
    private final static int SCALE = 6;

    public static float format(double aDouble) {
        BigDecimal bdLatitude = new BigDecimal(aDouble, MC).setScale(SCALE, RoundingMode.HALF_UP);
        return bdLatitude.floatValue();
    }

    public static float format(float aFloat) {
        BigDecimal bdLatitude = new BigDecimal(aFloat, MC).setScale(SCALE, RoundingMode.HALF_UP);
        return bdLatitude.floatValue();
    }

}

あとは電話するだけjs_price.put("price", BigDecimalUtils.format(f));

于 2015-05-04T09:32:56.690 に答える
0

GSONを試してみてください...

class Serializer {

// You can register custom serilaizers to it to suite your needs    
private static Gson gson = new GsonBuilder().create();

    public static final <T> String toJSON(T clazz) {
        return gson.toJson(clazz);
    }
}

次に、次のコードを使用してjson文字列を取得します

float f = 52.92;
Map<String,Object> js_price = new HashMap<String,Object>()
js_price.put("price", f);
String json = Serializer.toJSON(js_price)
于 2012-08-01T17:20:04.317 に答える
-2

逆シリアル化可能な値の後にこのメソッドを試すことができます

DecimalFormat dec = new DecimalFormat("###.##");

System.out.println(dec.format(value));
于 2012-08-01T17:18:53.283 に答える