在sql server中,當我選擇1/2時,它返回0而不是0.5
爲什麼會這樣?爲什麼sql server在1/2時返回0?
不是所有的分區都返回一個十進制值嗎? 我可以設置一個設置來使它正常分開嗎?
我注意到c#中的一樣#
這是什麼邏輯?
在sql server中,當我選擇1/2時,它返回0而不是0.5
爲什麼會這樣?爲什麼sql server在1/2時返回0?
不是所有的分區都返回一個十進制值嗎? 我可以設置一個設置來使它正常分開嗎?
我注意到c#中的一樣#
這是什麼邏輯?
整數除法
select 1/2
-- 0
浮法分裂(至少有一個參數必須是浮/十進制):
select 1/2.0
-- 0.5
select 1.0/2
-- 0.5
select 1.0/2.0
-- 0.5
如果整數被除數是除以整數除數,結果是 一個整數,其結果的任何小數部分被截斷。
編輯:
的一點是,你問爲什麼? 如此決定的語言的創造者,歷史,慣例。
我建議讀Is integer division uniquely defined in mathematics?。
請記住,在某些語言中,您有2個除法運算符(一個用於整數除法和一個用於實際除法)。
在計算機程序除以整數需要特別注意。一些 等編程語言(如C)將上面的情況視爲5 ,因此答案是整數。其他語言,如MATLAB 和每個計算機代數系統返回一個有理數作爲 答案,如上面的情況3。這些語言也提供函數 得到的其它情況下的結果,箱子或者直接或者從結果 3.
名稱和用於整數除法符號包括DIV,/,\和%。 定義有所不同關於整數除法當被除數或 除數爲負:舍入可以是朝向零(所謂 T-劃分),或者朝向-∞(F-司);更罕見的樣式可能發生 - 詳情請參閱 模數操作。
截斷。整數劃分。 –
如果兩個參數都是整數而不是返回整數,則至少有一個參數必須是浮點型返回浮點型值。 –
「是否有可以設置使其正常分割的設置」 - define * normal *。結果應該是「浮動」嗎?或「十進制」?在不同的上下文中,要麼是有意義的(就像'int',這是他們目前所做的)。 –