對象中BigDecimal值轉換爲JSON中精度丟失(出錯)的問題解決方法

代碼如下

1.定義一個包含BigDecimal類型的類

@Data
public class User {
    private String  name;
    private BigDecimal salary;
}

2.分別使用兩種方法將對象轉換爲字符串


public class Demo {
    public static void main(String[] args) {
        User user = new User();
        user.setName("張三");
        user.setSalary(new BigDecimal(150.01));
        System.out.println("com.alibaba.fastjson轉換結果"+com.alibaba.fastjson.JSONObject.toJSONString(user));
        System.out.println("net.sf.json.轉換結果:"+net.sf.json.JSONObject.fromObject(user).toString());
    }
}

運行結果如下:

 

 我們可以明顯的觀察到數字在轉換成字符串的時候精度發生了很大的變化,至於爲什麼會發生這種情況,有興趣的人可以自行百度一下,我這邊說一下如何解決這種方法

我們在定義這個類的時候需要對BigDecimal類型的值進行一下處理

處理方法:

public class User {
    private String  name;
    private BigDecimal salary;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public BigDecimal getSalary() {
        return salary.setScale(2,BigDecimal.ROUND_HALF_UP);
    }

    public void setSalary(BigDecimal salary) {
        this.salary = salary;
    }
}

 

最關鍵的部分:對BigDecimal保留相應的小數位setScale(2,BigDecimal.ROUND_HALF_UP);,我這邊是保留了2位小數

這邊保留方法是四捨五入的,可以參考相關博客

之後我們再看下轉換後的結果:

 這邊我沒有使用別的JSON轉換,所以不知道別的json在轉換成字符串時候是否也可以用上面的方法解決該類的問題,結果不一致的小夥伴可以反饋一下哈

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章