因此我想在SQL視圖中將另一個數字除以另一個數字。我將兩列分爲int類型,問題在於它給了我一個四捨五入的輸出,而不是一個精確的輸出。如何獲得SQL中的精確百分比calc
這是我的選擇
選擇了Numberone,numberTwo, (的Numberone * 100/NULLIF(numberTwo,0))作爲PctOutput
這是workign,但是當它潛水3 37它給我8而不是8.108。
我該如何修改這個給我一個準確的答案?我需要使用整數來表示數字嗎?如果是的話 - 進入什麼?
因此我想在SQL視圖中將另一個數字除以另一個數字。我將兩列分爲int類型,問題在於它給了我一個四捨五入的輸出,而不是一個精確的輸出。如何獲得SQL中的精確百分比calc
這是我的選擇
選擇了Numberone,numberTwo, (的Numberone * 100/NULLIF(numberTwo,0))作爲PctOutput
這是workign,但是當它潛水3 37它給我8而不是8.108。
我該如何修改這個給我一個準確的答案?我需要使用整數來表示數字嗎?如果是的話 - 進入什麼?
**--Cast the denominator as Float**
SELECT 3 * 100/NULLIF(CAST(37 AS FLOAT),0) -- 8.10810810810811
**--Multiply by 1.0 in either numerator OR denominator**
SELECT 3 * 100/NULLIF(37 * 1.0,0) -- 8.108108
SELECT 3.0 * 100/NULLIF(37,0) -- 8.108108
**--Convert it to decimal**
SELECT CONVERT(DECIMAL(25,13), 3) * 100/
NULLIF(CONVERT(DECIMAL(25,13), 37),0) -- 8.108108108
嘗試隱式轉換:
SELECT
numberOne,
numberTwo,
((1.0*numberOne)*100/NULLIF(1.0*numberTwo, 0)) as PctOutput
在SQL Server中的結果是相同類型的輸入的始終。所以是的,你需要轉換輸入。
我通常使用convert(decimal(9,2),numberOne)進行轉換,但取決於您可能想要轉換(real,numberOne)或使用不同級別的精度。
您需要將INT中的數字轉換爲浮點數或小數點。
如果您使用的文字,它們將可能是十進制(數字),而不是浮動(http://stackoverflow.com/questions/1072806/sql-server-calculation-with-numeric-literals)
注如果你使用十進制,你應該知道的規模和精密的劃分規則,如果你有,你可能會失去精度邊界附近號碼:
您不必同時轉換分子和分母。如果你只是需要避免整數除法,那麼只需轉換其中的一個即可。 –
@AndriyM我同意。感謝您指出。我現在編輯了我的答案。 – vmvadivel