在sql server中,当我选择1/2时,它返回0而不是0.5
为什么?
不应该所有分区都返回小数值吗?我可以设置一个设置让它正常划分吗?
我在c#中注意到了同样的
事情背后的逻辑是什么?
整数除法
select 1 / 2
-- 0
Run Code Online (Sandbox Code Playgroud)
浮点除法(至少有一个参数必须是浮点数/小数):
select 1 / 2.0
-- 0.5
select 1.0 / 2
-- 0.5
select 1.0 / 2.0
-- 0.5
Run Code Online (Sandbox Code Playgroud)
如果整数被除数除以整数除数,则结果是一个整数,其截断结果的任何小数部分.
编辑:
关键是你问为什么?Becasue语言的创造者决定如此,历史,惯例.
我建议读数是在数学中唯一定义的整数除法吗?.
请记住,在某些语言中,您有2个除法运算符(一个用于整数除法,一个用于实际除法).
在计算机程序中划分整数需要特别小心.某些编程语言(如C)会像上面的情况5那样处理整数除法,因此答案是整数.其他语言,如MATLAB和每个计算机代数系统都返回一个有理数作为答案,如上面的情况3.这些语言还提供了直接或从案例3的结果中获取其他案例结果的函数.
用于整数除法的名称和符号包括div,/,\和%.当被除数或除数为负时,关于整数除法的定义不同:舍入可以朝向零(所谓的T-除法)或朝向-∞(F-除); 可能会出现更罕见的样式 - 请参阅Modulo操作以获取详细信息.