Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 为什么SQL Server要舍入两个整数的除法结果?_Sql Server_Templates_Rounding - Fatal编程技术网

Sql server 为什么SQL Server要舍入两个整数的除法结果?

Sql server 为什么SQL Server要舍入两个整数的除法结果?,sql-server,templates,rounding,Sql Server,Templates,Rounding,我有一个带有smallint列的表,其中包含作为整数的百分比(即50、75、85等) 当我把这列除以100,就像 SELECT MY_COLUMN/100 AS PCT_AS_FRACTION FROM MY_TABLE 结果四舍五入到最接近的整数。 例如,对于包含数字“50”的行,结果为零 我可以用一句简单的话来重复这一点: SELECT 50 / 100 AS TEST_VALUE 为什么会这样?我怎样才能在我的结果中获得更高的精度?当你进行整数除法(整数除以整数)时,你总是得到一个整数

我有一个带有smallint列的表,其中包含作为整数的百分比(即50、75、85等)

当我把这列除以100,就像

SELECT MY_COLUMN/100 AS PCT_AS_FRACTION
FROM MY_TABLE
结果四舍五入到最接近的整数。 例如,对于包含数字“50”的行,结果为零

我可以用一句简单的话来重复这一点:

SELECT 50 / 100 AS TEST_VALUE

为什么会这样?我怎样才能在我的结果中获得更高的精度?

当你进行整数除法(整数除以整数)时,你总是得到一个整数答案。50/100=.50,整数形式为0


你试过把我的_列除以100.0吗?

你在做整数除法。 50/100为0,余数为50

您需要使用浮点除法。

强制转换整数

SELECT (cast(50 AS float)/100)

将2个整数除以,得到另一个整数

这也应该是可能的


选择(50/100)::数字

NB-注意整数除法的余数不是四舍五入的。相反,它被丢弃了。这相当于调用FLOOR sql函数

这很常见,之所以这样定义是因为当两个整数相乘时,分数永远不会出现。因此,在乘法整数时,绝不会假设分数处理方法,但在整数除法中却不能这样说

在SQL中执行日期时间算法时,这通常会产生影响。

在使用运算符时

返回具有较高优先级的参数的数据类型

如果整数被除数除以整数除数,则结果为 结果的任何小数部分被截断的整数


因此,您需要将至少一个操作数强制转换为适当的类型:or。

除以100.0有效。简单问题的简单解释。谢谢:)顺便说一句,乘以0.01也有同样的效果,而且可能更明显。具体的“整数”术语是截断
75/100
仍然返回
0
。定义是简单地从数字中删除任何小数部分。