数据库中“钱”数据类型如何设计?
关于数据库数据类型money,从最近的两个项目中有些体会。
上个项目,单价信息我设计的是money,因为“钱”自然对应money——我这么考虑的。出现的问题是,我们有数量信息,它不是整数是有小数的,我设计的是float,还有总价,因为涉及计算很多,我们都在内部算好放在一个总价的字段便于获取和统计,总价的字段也为money。问题就是money*float很多时候小数后位数超过了Money类型后的4位小数,需要强制转数据类型,同事跟我抱怨——“烦人”。
这次又有单价,数量的问题,所以我考虑是不是换掉money?
首先,我要弄清楚为什么会出现强制转换?原因是4位小数*未知位小数得到的结果很大可能性超过4为小数,所以会要进行数据类型的转换。
接着,就是想解决的方案。经过选择我确定用decimal,单价用decimal(18,2),数量用decimal(18,2),预留总价decimal(18,4),这样2位小数*2位小数差不多4位小数,这样数据库存储时就不用强制类型转换了。
确定了这个方案就是实施,已经实践,好与坏还要等待开发和使用的体会。
上个项目,单价信息我设计的是money,因为“钱”自然对应money——我这么考虑的。出现的问题是,我们有数量信息,它不是整数是有小数的,我设计的是float,还有总价,因为涉及计算很多,我们都在内部算好放在一个总价的字段便于获取和统计,总价的字段也为money。问题就是money*float很多时候小数后位数超过了Money类型后的4位小数,需要强制转数据类型,同事跟我抱怨——“烦人”。
这次又有单价,数量的问题,所以我考虑是不是换掉money?
首先,我要弄清楚为什么会出现强制转换?原因是4位小数*未知位小数得到的结果很大可能性超过4为小数,所以会要进行数据类型的转换。
接着,就是想解决的方案。经过选择我确定用decimal,单价用decimal(18,2),数量用decimal(18,2),预留总价decimal(18,4),这样2位小数*2位小数差不多4位小数,这样数据库存储时就不用强制类型转换了。
确定了这个方案就是实施,已经实践,好与坏还要等待开发和使用的体会。
posted on 2007-10-24 11:08 littlebamboo 阅读(2428) 评论(5) 编辑 收藏 举报