请教关于四舍五入的问题
小弟新手,有个问题向大家求教。
在小弟编制的系统中,有如下一句
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直接计算。
------解决方案--------------------整数相除得出的还是整数,小数与整数相除才会得出有精度的数据