+ -
当前位置:首页 → 问答吧 → 关于Money字段类型的问题

关于Money字段类型的问题

时间:2011-12-24

来源:互联网

数据库里的货币类型的字段我选择了MONEY类型,但是使用的过程中遇到了很多让我无比困惑的问题,
1、数据库里的yajin字段明明数值都是200,使用select sum(yajin) 求和,5个200理论上来讲应该是1000,但是求和出来的结果却是999,这是为什么呢?200*5=999???
2、数据库里的值明明是12.0000显示出来却是11.9999,到底是为什么呢?我应该怎么处理?

作者: bug810   发布时间: 2011-12-24

精度问题吧,MONEY不好用,货币用dec或者numeric就可以

作者: ssp2009   发布时间: 2011-12-24

引用楼主 bug810 的回复:
数据库里的货币类型的字段我选择了MONEY类型,但是使用的过程中遇到了很多让我无比困惑的问题,
1、数据库里的yajin字段明明数值都是200,使用select sum(yajin) 求和,5个200理论上来讲应该是1000,但是求和出来的结果却是999,这是为什么呢?200*5=999???
2、数据库里的值明明是12.0000显示出来却是11.9999,到底是为什么呢?我应该怎么处理?
建议使用decimal或numeric类型.money类型由于精度的问题,可能出现数据不准确.

作者: dawugui   发布时间: 2011-12-24

程序已经写好了,数据库里好多地方用的都是MONEY类型,要是现在改,可能会出现错误把了,有没有补救的办法

作者: bug810   发布时间: 2011-12-24

Money数据类型是特殊的decimal
是固定的四位小数
应该不是所谓的近似问题
我想楼主的应该是程序端的数据类型的问题
或者楼主
可以把语句直接在数据库端执行看看

应该不会出现
5个200理论上来讲应该是1000,但是求和出来的结果却是999,这是为什么呢?200*5=999???

作者: wufeng4552   发布时间: 2011-12-24

你用的是不是real/float?money精确数不可能出现这种问题。

作者: Limpire   发布时间: 2011-12-24

引用 4 楼 wufeng4552 的回复:

Money数据类型是特殊的decimal


money是bigint,基数0.0001,存储形式都和bigint一样,一个整形的运算怎么会有精度误差,只有溢出。

作者: Limpire   发布时间: 2011-12-24