公司前後端協定,後端資料庫中對于價格落庫的時候統一機關: 分,通過接口傳回給前端則統一轉換成元,比如商品價格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格,反正我是這麼認為的!