从舍入删除小数的SQL格式

时间:2012-10-03 10:34:40

标签: sql sql-server-2008 decimal

我在内部查询中有一个计算字段'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。

我想要重绕价值观。有什么功能吗?

4 个答案:

答案 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)

结果:1​​1

SELECT CONVERT(INT, 11.6)

结果:1​​1