Java中只要涉及到钱的交易就会有金额字段的考虑。最近的发现问题有精度损失。
最开始用int字段去存储金额,当入库到数据库会有小数字段。如115.63就直接报错。那么改用varchar去存储。
在实际业务场景,需取出时需要根据金额做逻辑操作。当时采用的方法,cash为115.63,用parseDouble解析 发现了值变了,精度丢失。导致接口报错。
String.valueOf(Double.parseDouble(cash)*100)
v于是测试
String sb = String.valueOf(Double.parseDouble("80.74")*100);
System.out.println(sb);
tr输出 8073.999999999999
最终通过BigDecimal去解决
BigDecimal bg = new BigDecimal("80.74");
String cash = String.valueOf(bg.multiply(new BigDecimal(100)).intValue());
System.out.println(cash);
输出
所以通过此次实验,对待金额存储的最佳方案。Varchar存储以分为单位的金额。在实际逻辑中如果要用,需要通过BigDecimal类去解决。这个类很强大,加减乘除及各种类型转换的方法都有封装。