如何优雅把分不失精度转换成元

时间:2025-03-21 22:52:08

公司前后端协定,后端数据库中对于价格落库的时候统一单位: 分,通过接口返回给前端则统一转换成元,比如商品价格25.68,数据库落库则是2568,但是接口给前端返回则需要25.68;

在转换的过程中需要注意精度的丢失,所以直接摒弃double,float采用BigDecimal类型,当然你写个方法类,里面加上下面的方法:

 private static final BigDecimal DIVIDENUM = new BigDecimal(100);

    private static final String DEFAULT_VALUE = "0";

    public static String RMBFenToYuan(Integer fen){
        return  (fen) ? DEFAULT_VALUE : new BigDecimal(fen).divide(DIVIDENUM).toString();
    }

然后每次在有需要的时候调用即可。

如果你想B格稍微高一些,走路带点风的话,你还可以这么实现:

final public class FenToYuanForRMB extends JsonSerializer<Integer> {
    private static final BigDecimal DIVIDENUM = new BigDecimal(100);

    private static final String DEFAULT_VALUE = "0";

    @Override
    public void serialize(Integer fen, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
        String yuan = (fen) ? DEFAULT_VALUE : new BigDecimal(fen).divide(DIVIDENUM).toString();
        (yuan);
    }
}

然后只需要在给前端的接口的实体类中相关字段的get方法加上注解 @JsonSerialize(using = )
具体用法:

@ApiModel
public class Test implements Serializable {

    @ApiModelProperty("价格")
    private Integer price;
    
    @JsonSerialize(using = )
    public Integer getPrice() {
        return price;
    }

    public void setPrice(Integer price) {
         = price;
    }
}

哈哈,其实效果是一样的,后面方法用的人应该少些,所以会稍显B格,反正我是这么认为的!