Ответ 1
У меня была аналогичная ситуация в моем проекте. Я добавил код форматирования в метод setter POJO. DecimalFormatter, Math и другие классы закончили округление значения, однако мое требование состояло не в том, чтобы округлить значение, а только для ограничения отображения до двух знаков после запятой.
Я воссоздал этот сценарий.
Продукт представляет собой POJO, который имеет член Double amount
.
JavaToJSON - это класс, который создаст экземпляр Product и преобразует его в JSON.
Установщик setAmount
в Product
позаботится о форматировании до 2 знаков после запятой.
Вот полный код.
Product.java
package com;
import java.math.BigDecimal;
import java.math.RoundingMode;
public class Product {
private String name;
private Double amount;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Double getAmount() {
return amount;
}
public void setAmount(Double amount) {
BigDecimal bd = new BigDecimal(amount).setScale(2, RoundingMode.FLOOR);
this.amount = bd.doubleValue();
}
@Override
public String toString() {
return "Product [name=" + name + ", amount=" + amount + "]";
}
}
JavaToJSON.java
package com;
import java.io.File;
import java.io.IOException;
import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;
public class JavaToJSON {
public static void main(String[] args){
ObjectMapper mapper = new ObjectMapper();
try {
Product product = new Product();
product.setName("TestProduct");
product.setAmount(Double.valueOf("459.99999999999994"));
// Convert product to JSON and write to file
mapper.writeValue(new File("d:\\user.json"), product);
// display to console
System.out.println(product);
} catch (JsonGenerationException e) {
e.printStackTrace();
} catch (JsonMappingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
У меня недостаточно накопленных баллов, поэтому я не могу загрузить скриншоты, чтобы показать вам результат.
Надеюсь, что это поможет.