加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

sql中查询数据精度的问题

(2010-05-26 10:20:42)
标签:

杂谈

分类: sql

select t.cMatGUID,
                  cast(sum(t.iInQTY) as decimal(21,9)) as  iQTY,
                  cast(sum(t.iInAMT) as decimal(21,9)) as iAMT,
    sum(t.iInQTY) as iInQTY ,
    
    case when sum(t.iInQTY)=0 then null
                else
                cast(cast(sum(t.iInAMT) as decimal(15,9))/cast(sum(t.iInQTY) as decimal(15,9))

                as decimal(15,9)) end
                as iInUnitPrice,
    sum(t.iInAMT) as iInAMT
   from IA_SubsidiaryLedger t
   group by t.cMatGUID

这里:

 cast(sum(t.iInAMT) as decimal(15,9))  是把sum(t.iInAMT) 取出的值定义成15位总长度,小数位为9位

这里面的iInUnitPrice字段取出的精度为9位效果如下

http://s1/middle/59e03e0cg87761620a710&690

 

如果不用cast转换:sum(t.iInAMT)/sum(t.iInQTY) end as iInUnitPrice,则会保存成默认6位的情况,而且是从小数后6位把后面的全截掉了,不四舍五入,1.000285959,截成6位应该是1.000286,而实际效果为下图:

http://s11/middle/59e03e0cg8776269e291a&690

 

希望能为大家解决截取精度不正确的问题

 



 

 

 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有