为什么输出会有差异?

时间:2014-12-26 10:04:17

标签: sql sql-server

select ROUND(5.8990,0) output is 6.000

select ROUND(643/109,0) output is 5 

为什么输出会有差异?

7 个答案:

答案 0 :(得分:2)

由于使用了整数除法。

> select 643/109;
5
> select round(643/109, 0);
5.0
> select 643/109.0;
5.89908256880734
> select round(643/109.0, 0);
6.0

第一个命令显示正在进行整数除法。因此,将除数或被除数更改为浮点数,您将得到预期结果,如上一个命令所示。

答案 1 :(得分:0)

select 643/109给出了5商。因此select ROUND(5,0)5

答案 2 :(得分:0)

这是因为int / int仅返回int部分。

试试这个:

select Round(Cast(643 as decimal)/cast(109 as decimal),0)

答案 3 :(得分:0)

解决方法是将小数点添加到任何数字。然后圆函数的参数将是小数而不是整数。

答案 4 :(得分:0)

如果你想获得Decimal部分也应该使用float或decimal,请参考下面的代码

select ROUND(CONVERT(Decimal(18,2),643)/CONVERT(Decimal(18,2),109),0) output is 6.000

答案 5 :(得分:0)

在您的第一个查询中,select ROUND(5.8990,0)输出为6.000,因为由于存在该点,传递的值5.8990被假定为十进制。但是在第二个查询的情况下,select ROUND(643/109,0) 643和109被假定为整数,因此返回的值是5,而不是您期望的5.8990。为了更改获得输出为6.000,您所要做的就是传递第二个查询:

select ROUND(643.00/109.00,0)

enter image description here

答案 6 :(得分:0)

在第二种情况下,您要分割两个整数,因此得到一个整数作为结果。除法的结果是5.89,但它只会丢弃任何余数,因为它需要一个整数作为返回,所以这给你5.结果被截断。 More info

如果您想获得小数结果,只需在分区的任何一侧使用小数点数,例如

select ROUND(643.0/109,0) -- returns 6
-- or
select ROUND(643/109.0,0) -- also returns 6

在第一种情况下,ROUND不会截断结果,它将舍入到下一个更接近的整数(根据您提供的参数)。如果使用

,您可以得到相同的结果
select ROUND(5.8990, 0, 1) 
-- returns 5

有关R here

的更多信息