sql server round

时间:2015-01-26 11:29:15

标签: sql asp.net sql-server

select round((cast(56/3 AS DECIMAL (4,2))),1)

显示18输出而不是19,其中实际值为18.66。 我的回合功能不起作用 请帮忙。

3 个答案:

答案 0 :(得分:2)

问题是56/3整数计算,这意味着没有浮点数。

您需要在初始计算中使用浮点数,例如56.0/3。此外,如果你想要舍入到19然后你需要舍入到最近的整个号码,ROUND(x, 1)将舍入到第一个小数位 - 你需要将0传递给最高可达19岁。

SELECT ROUND((CAST(56.0/3 AS DECIMAL (4,2))),0)

或者,您可以为ROUND

切换CEILING
select CEILING(CAST(56.0/3 AS DECIMAL(4,2)))

答案 1 :(得分:1)

您的代码部分:

CAST( 56/3 AS DECIMAL )

首先评估返回18的56/3。然后将其转换为十进制,得到18.0。

你需要在分割之前施放分子或分母。

round功能正常运行 - 它只是没有使用您认为的输入。

答案 2 :(得分:1)

在分割数字之前转换其中一个整数值:

select round(56/convert(DECIMAL (4,2),3),0);

如果你不这样做,你划分整数,导致18而不是18.66