8

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

4 回答 4

36

在 sql server 中使用 ROUND() (参见示例)函数

select round(11.6,0)

结果:

12.0

例 2:

select round(11.4,0)

结果:

11.0

如果你不想要小数部分,你可以做

select cast(round(11.6,0) as int)
于 2012-10-03T10:39:27.077 回答
1
CAST(Round(MySum * 20.0 /100, 0) AS INT)

供参考

MySum * 20 /100,我得到 11

这是因为当所有 3 个操作数都是 INT 时,SQL Server 会从左到右执行整数数学运算,截断所有中间结果。

58 * 20 / 100 => 1160 / 100 => 11 (truncated from 11.6)

同样对于记录ROUND(m,n)将结果返回到 n 个小数位,而不是n 个有效数字。

于 2012-10-03T10:39:01.013 回答
1

检查round函数以及参数如何length工作。它控制结果精度的行为

于 2012-10-03T10:43:02.760 回答
-1
SELECT CONVERT(INT, 11.4)

结果:11

SELECT CONVERT(INT, 11.6)

结果:11

于 2014-04-01T11:26:07.960 回答