解决浮点类型在商业运算中的精度丢失问题
导言:money一直是一个敏感的话题,商业运算中money的计算显得有为重要,我们知道在java中浮点类型float,double在运算中会出现精度丢失的问题
场景:例如某用户有10块钱,买了一件商品花了8.8,理应剩下1.2元。但却无法继续购买价格为1.2元的商品,这就出现了1.2+8.8不等于10的现象,用户就会觉得特别不合理,明明是10块的东西而十块钱却买不到。这就是浮点数在商业运算中出现精度丢失所带来的严重问题。
针对以上问题笔者认为有两种解决方案:
第一种:
在设计数据库表的时候可以将price字段类型设置为int(oracle应设置为number)类型,而在实体中对应的属性单位应该表示为分(即精确到0.00)或者角(即0.0),但一般情况下money会精确到分。这里只是说明这个问题的解决思想
例如:
在商品实体类中:
public class item{
private String id;
private String name;
private int price;
....
//get,set方法...
}
如果商品的价格为12.53元(精确到分)
在数据库中price字段对应的数据为应该为1253
使用这种方法需要编程人员自己在程序中收懂转换&