请教关于四舍五入的问题

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



...全文
289 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
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

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧