为什么sql server为1/2返回0?

时间:2015-11-04 08:45:09

标签: sql sql-server

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

不应该所有分区都返回小数值吗? 我可以设置一个设置使其正常划分吗?

我在c#中注意到了同样的情况 这背后的逻辑是什么?

1 个答案:

答案 0 :(得分: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

  

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

修改

关键是你问为什么? Becasue语言的创造者决定了这一点,历史,惯例。

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

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

<强> Division Integer

  

在计算机程序中划分整数需要特别小心。一些   编程语言,如C,处理整数除法,如案例5   上面,所以答案是整数。其他语言,如MATLAB   并且每个计算机代数系统都返回一个有理数   回答,如上面的案例3。这些语言也提供了功能   直接或从结果中获取其他案例的结果   案例3。

     

用于整数除法的名称和符号包括div,/,\和%。   当被除数时,定义因整数除法而异   除数是负的:舍入可能是零(所谓的   T-division)或-∞(F-division);可以出现更罕见的风格 - 请参阅   模数操作的详细信息。

<小时/> 对于downvoters发表评论,我可以回复/改进我的答案。