为什么 sql server 为 1/2 返回 0? [英] why does sql server return 0 for 1 / 2?

查看:70
本文介绍了为什么 sql server 为 1/2 返回 0?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

不是所有的除法都应该返回一个十进制值吗?有没有我可以设置的设置使它正常分割?

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

解决方案

整数除法

选择 1/2-- 0

浮点除法(至少一个参数必须是浮点/十进制):

选择 1/2.0-- 0.5选择 1.0/2-- 0.5选择 1.0/2.0-- 0.5

划分

<块引用>

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

重点是你问为什么?因为语言的创造者是这样决定的,无论是历史还是惯例.

我建议阅读整数除法是否在数学中唯一定义?.

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

除法整数<块引用>

在计算机程序中对整数进行除法需要特别小心.一些编程语言,如 C,将整数除法视为情况 5上面,所以答案是一个整数.其他语言,例如 MATLAB并且每个计算机代数系统都返回一个有理数作为回答,如上面的情况 3.这些语言还提供功能直接或从结果中获取其他情况的结果案例 3.

用于整数除法的名称和符号包括 div、/、\ 和 %.当被除数或被除数时,整数除法的定义有所不同除数为负:四舍五入可能趋向于零(所谓的T-division) 或朝向 −∞ (F-division);可能会出现更罕见的风格——见求模运算详情.

<小时>对于反对者发表评论,以便我可以回复/改进我的答案.

In sql server when I do select 1 / 2 it returns 0 in stead of 0.5
Why is that?

Should not all divisions return a decimal value? Is there a setting I can set to make it divide normal?

I noticed the same in c#
What is the logic behind this?

解决方案

Integer division

select 1 / 2  
-- 0

Float division (at least one argument have to be float/decimal):

select 1 / 2.0
-- 0.5

select 1.0 / 2
-- 0.5

select 1.0 / 2.0
-- 0.5

Divide

If an integer dividend is divided by an integer divisor, the result is an integer that has any fractional part of the result truncated.

EDIT:

The point is you ask why? Becasue creator of language decided so, history, convention whatsoever.

I suggest read Is integer division uniquely defined in mathematics?.

Keep in mind that in some languages you have 2 division operators (one for integer division and one for real division).

Division Integer

Dividing integers in a computer program requires special care. Some programming languages, such as C, treat integer division as in case 5 above, so the answer is an integer. Other languages, such as MATLAB and every computer algebra system return a rational number as the answer, as in case 3 above. These languages also provide functions to get the results of the other cases, either directly or from the result of case 3.

Names and symbols used for integer division include div, /, \, and %. Definitions vary regarding integer division when the dividend or the divisor is negative: rounding may be toward zero (so called T-division) or toward −∞ (F-division); rarer styles can occur – see Modulo operation for the details.


For downvoters leave a comment so I can reply/improve my answer.

这篇关于为什么 sql server 为 1/2 返回 0?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆