`
jimmy9495
  • 浏览: 296434 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

处理mysql金额运算sum*float出现多位不精确小数

阅读更多
4840.00*0.4500= 2178
SUM(r.sum_rmb_price)*p.default_fee_prop = 2177.9999

sum_rmb_price float(8,2);
default_fee_prop  float(4,4);

方法一:最好的办法是将float字段改为decimal(16,6)。具体方法:可设置一个临时字段,结合MySQL的关键字binary进行准确复制等。

方法二:使用binary关键字解决。具体操作为“select sum(binary 字段名(float类型))”

select sum(a.number*binary(b.price)) as total
        from ler_card as a
        left join ler_items as b on a.itemId=b.itemId
        where user_id=1

http://bbs.chinaunix.net/thread-4113095-1-1.html
http://bbs.chinaunix.net/forum.php?mod=redirect&goto=findpost&ptid=4113095&pid=24076320

mysql字段类型为decimal,则java 实体类的对应属性类型java.math.BigDecimal


MySQL数据类型-decimal详解
对于精度比较高的东西,比如money,我会用decimal类型,不会考虑float,double,因为他们容易产生误差,numeric和decimal同义,numeric将自动转成decimal。

DECIMAL从MySQL 5.1引入,列的声明语法是DECIMAL(M,D)。在MySQL 5.1中,参量的取值范围如下:

·M是数字的最大数(精度)。其范围为1~65(在较旧的MySQL版本中,允许的范围是1~254),M 的默认值是10。

·D是小数点右侧数字的数目(标度)。其范围是0~30,但不得超过M。
  • 大小: 128.6 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics