簡體   English   中英

gson.toJson(對象)BigDecimal Precision Lost

[英]gson.toJson(object) BigDecimal Precision Lost

當我將Object轉換為Json時,我遇到了BigDecimal Precision丟失的問題。
讓我說我有Pojo課,

public class DummyPojo {
    private BigDecimal amount;
    private String id;
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public BigDecimal getAmount() {
        return amount;
    }
    public void setAmount(BigDecimal amount) {
        this.amount = amount;
    }
} 

現在我正在為Pojo設置值,然后轉換為JSON

public static void main(String[] args) {
        BigDecimal big = new BigDecimal("1000.0005");
        JSONObject resultJson = new JSONObject();
        DummyPojo summary = new DummyPojo();
        summary.setId("A001");
        summary.setAmount(big);

        resultJson.put("summary",new Gson().toJson(summary));
        String result = resultJson.toString();
        System.out.println(result);
    }

第一次測試 - 正確輸出

Output -> {"summary":{"amount":1000.0005,"id":"A001"}}

第二次測試 - 輸出錯誤(丟失BigDecimal精度)

BigDecimal big = new BigDecimal("1234567.5555"); //Changed the value
Output -> {"summary":{"amount":1234567.5,"id":"A001"}}

第3次測試 - 輸出錯誤(丟失BigDecimal精度)

BigDecimal big = new BigDecimal("100000.0005"); //Changed the value
Output -> {"summary":{"amount":100000,"id":"A001"}}

令人驚訝的是,每當BigDecimal值更長時,它也會截斷小數位。 json coversion有什么問題。 你能幫我解決一下嗎?

我認為你將Java EE 7的JSONObject與GSON的JsonObject混合在一起。 Gson似乎沒有你提到的問題:

public static void main(String[] args) {
    BigDecimal big = new BigDecimal("1234567.5555");
    DummyPojo summary = new DummyPojo();
    JsonObject resultJson = new JsonObject(); //this is Gson not Java EE 7
    summary.setId("A001");
    summary.setAmount(big);
    resultJson.addProperty("summary", new Gson().toJson(summary));
    System.out.println(resultJson.toString());
    //Outputs: {"summary":"{\"amount\":1234567.5555,\"id\":\"A001\"}"}
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM