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

公司前后端协定,后端数据库中对于价格落库的时候统一单位: 分,通过接口返回给前端则统一转换成元,比如商品价格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  Objects.isNull(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 = Objects.isNull(fen) ? DEFAULT_VALUE : new BigDecimal(fen).divide(DIVIDENUM).toString();
        jsonGenerator.writeString(yuan);
    }
}

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

@ApiModel
public class Test implements Serializable {

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

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

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

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值