2015-11-04 39 views
-2

在sql server中,当我选择1/2时,它返回0而不是0.5
为什么会这样?为什么sql server在1/2时返回0?

不是所有的分区都返回一个十进制值吗? 我可以设置一个设置来使它正常分开吗?

我注意到c#中的一样#
这是什么逻辑?

+0

截断。整数划分。 –

+0

如果两个参数都是整数而不是返回整数,则至少有一个参数必须是浮点型返回浮点型值。 –

+0

“是否有可以设置使其正常分割的设置” - define * normal *。结果应该是“浮动”吗?或“十进制”?在不同的上下文中,要么是有意义的(就像'int',这是他们目前所做的)。 –

回答

5

整数除法

select 1/2 
-- 0 

浮法分裂(至少有一个参数必须是浮/十进制):

select 1/2.0 
-- 0.5 

select 1.0/2 
-- 0.5 

select 1.0/2.0 
-- 0.5 

Divide

如果整数被除数是除以整数除数,结果是 一个整数,其结果的任何小数部分被截断。

编辑:

的一点是,你问为什么? 如此决定的语言的创造者,历史,惯例。

我建议读Is integer division uniquely defined in mathematics?

请记住,在某些语言中,您有2个除法运算符(一个用于整数除法和一个用于实际除法)。

Division Integer

在计算机程序除以整数需要特别注意。一些 等编程语言(如C)将上面的情况视为5 ,因此答案是整数。其他语言,如MATLAB 和每个计算机代数系统返回一个有理数作为 答案,如上面的情况3。这些语言也提供函数 得到的其它情况下的结果,箱子或者直接或者从结果 3.

名称和用于整数除法符号包括DIV,/,\和%。 定义有所不同关于整数除法当被除数或 除数为负:舍入可以是朝向零(所谓 T-划分),或者朝向-∞(F-司);更罕见的样式可能发生 - 详情请参阅 模数操作。


对于downvoters发表评论,所以我可以回答/改善我的答案。

+0

是的,我知道,但为什么这么想 – GuidoG

+0

谁想出了这个想法? – GuidoG

+0

@GuidoG语言/ sql服务器引擎的创建者。你的问题是为什么而不是如何?我建议在[programmers.stackexchange.com](http://programmers.stackexchange.com/)中提出这个问题'程序员Stack Exchange是一个专业程序员对软件开发概念性问题感兴趣的问题和答案网站。你的问题是关于历史/公约的。 – lad2025

相关问题