请教关于四舍五入的问题

jthkl 2013-01-05 11:26:45
小弟新手,有个问题向大家求教。
在小弟编制的系统中,有如下一句

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呢?



...全文
236 点赞 收藏 5
写回复
5 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
xuam 2013-01-05
SELECT ROUND(150.75, 0) 151.00 SELECT ROUND(150.75, 0, 1) 150.00
回复
szm341 2013-01-05
整数相除得出的还是整数,小数与整数相除才会得出有精度的数据
回复
叶子 2013-01-05
参考: SQL Server精度数据(decimal和numeric)在算术运算时的自动转换规则 sql中可以存储数据,但是如果要计算,建议在程序中结算后再把结果存在数据库中,不要用sql直接计算。
回复
select 1.0*7521693/35821619 select cast(7521693 as decimal(18,10))/35821619
回复
弘恩 2013-01-05
select 1.0*7521693/35821619
回复
相关推荐
发帖
MS-SQL Server
创建于2007-09-28

3.3w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2013-01-05 11:26
社区公告
暂无公告