我在内部查询中有一个计算字段'MySum',其计算后的值为58。
我需要得到这个值的20%。
如果我给:
MySum * 20 /100, I get 11
如果我给:
((20 * CAST(MySum as decimal(6,2)))/100) , I get 11.60000
如果我给
Round(((20 * CAST(MySum as decimal(6,2)))/100), 2), I still get 11.60000
我想要那个,
如果结果为11.6,则显示12,如果结果为11.4,则显示11。
我想要重绕价值观。有什么功能吗?
答案 0 :(得分:30)
在sql server
中使用ROUND()(See examples )函数select round(11.6,0)
结果:
12.0
EX2:
select round(11.4,0)
结果:
11.0
如果你不想要小数部分,你可以做
select cast(round(11.6,0) as int)
答案 1 :(得分:1)
CAST(Round(MySum * 20.0 /100, 0) AS INT)
FYI
MySum * 20/100,我得到11
这是因为当所有3个操作数都是INT时,SQL Server将执行从左到右的整数数学运算,截断所有中间结果。
58 * 20 / 100 => 1160 / 100 => 11 (truncated from 11.6)
同样对于记录 ROUND(m,n)将结果返回到n个小数位,不 n个有效数字。
答案 2 :(得分:1)
检查round函数以及length
参数的工作原理。它控制结果精度的行为
答案 3 :(得分:-1)
SELECT CONVERT(INT, 11.4)
结果:11
SELECT CONVERT(INT, 11.6)
结果:11