Sql server 为什么SQL Server要舍入两个整数的除法结果?
我有一个带有smallint列的表,其中包含作为整数的百分比(即50、75、85等) 当我把这列除以100,就像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 为什么会这样?我怎样才能在我的结果中获得更高的精度?当你进行整数除法(整数除以整数)时,你总是得到一个整数
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
。定义是简单地从数字中删除任何小数部分。