四舍五入后的大十进制格式

时间:2017-02-21 18:37:39

标签: java currency bigdecimal price

我在使用Big Decimal及其舍入后的格式时出现问题。我的输入价格为35.90,输出返回35.9

这就是我正在进行舍入的方式:

BigDecimal scaledResult = rs.getPrice().setScale(2, BigDecimal.ROUND_HALF_UP);
sc.setPrice(scaledResult);

返回35.9输出,即使我已将比例设置为两位小数。有任何想法吗?

2 个答案:

答案 0 :(得分:2)

感谢大家的帮助,以下是我通过编写序列化器来解决它的问题:

public class BigDecimalSerializer extends JsonSerializer<BigDecimal> {
    @Override
    public void serialize(BigDecimal value, JsonGenerator jgen, SerializerProvider provider) throws IOException,
            JsonProcessingException {
        jgen.writeString(value.setScale(2, BigDecimal.ROUND_HALF_UP).toString());
    }
}

和我模特的领域:

@JsonSerialize(using = BigDecimalSerializer.class)
private BigDecimal price;

答案 1 :(得分:1)

您的四舍五入 工作正常原因,为什么您没有得到结尾的零?是因为正在返回 响应BigDecimal相反,您需要返回String(也有人提到过)。

使用@JsonFormat 注释(在响应对象中的shape变量之上,将STRING作为BigDecimal)的方法很简单。请参阅以下内容:

 import com.fasterxml.jackson.annotation.JsonFormat;

  class YourResponseObjectClass {

    @JsonFormat (shape=JsonFormat.Shape.STRING)
    private BigDecimal price;

 }