select ROUND(5.8990,0) output is 6.000
select ROUND(643/109,0) output is 5
为什么输出会有差异?
答案 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)
答案 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
的更多信息