问题
数据库保存数据会损失精度,例如保存的数据为3.4599999999999999……
解决方式
设计时,约定金额数据统一精确到分(0.00),分之后的小数均舍去;
前端传入的是double类型,后端用BigDecimal类型接收数据;
校验时金额必须是正整数,限制传入大小
Range.closed(0,9999999).contains(amount.movePointRight(2).intValue())//--金额限制在0-999999.99之间--
private BigDecimal amount;
数据库设计字段
ALTER TABLE tsble1 ADD amount INT(8) DEFAULT NULL COMMENT '金额;单位:分';
保存时数据转换,存入是将数据扩大一百倍作为整数存储,将amount1保存入库
BigDecimal amount ;
Integer amount1 = amount.movePointRight(2).intValue();
将数据库中的数据保存输出,输出时将数据缩小100倍输出
BigDecimal amount = new BigDecimal(amount1).movePointLeft(2);