2015-11-04 40 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

相關問題