日期:2014-05-17  浏览次数:20447 次

请教关于四舍五入的问题
小弟新手,有个问题向大家求教。
在小弟编制的系统中,有如下一句

select 商场代码,商场名称,sum(合计吊牌额) as 吊牌额,sum(折扣金额) as 折扣金额,round(sum(通讯销售额)/sum(吊牌额)*100,2) as 平均折扣,sum(通讯销售额) as 通讯销售额,sum(实际销售额) as 实际销售额 from 商场结算明细单 where 期间>='2012-1-1'  and 期间<='2012-2-1'  group by 商场名称,商场代码 order by 商场代码

在平均折扣那个字段是 通讯销售额求和 除 吊牌额求和 再四舍五入,当前数据是7521693/35821619,计算器结果0.20997635,也就是说结果应该是21.00,但是数据库却返回20.99,不知道为什么?

在之后的试验中又发现
select 4.5/2
返回2.250000
而select 7521693/35821619
返回0

请教为什么不能得到0.209976呢?




------解决方案--------------------
select 1.0*7521693/35821619


select cast(7521693 as decimal(18,10))/35821619
------解决方案--------------------
参考:
SQL Server精度数据(decimal和numeric)在算术运算时的自动转换规则

sql中可以存储数据,但是如果要计算,建议在程序中结算后再把结果存在数据库中,不要用sql直接计算。


------解决方案--------------------
整数相除得出的还是整数,小数与整数相除才会得出有精度的数据