[英]Get an accurate percentage calculation
我試圖在 SQL 視圖中將一個數字除以另一個。 我將兩列分別為int
類型,問題是它給了我一個四舍五入的輸出,而不是一個准確的輸出。
這是我的選擇:
SELECT numberOne, numberTwo, (numberOne*100/NULLIF(numberTwo, 0)) as PctOutput
這是有效的,但是當它以 37 倍下降 3 時,它給了我 8 而不是 8.108。
我將如何修改它以給我一個准確的答案? 我需要從整數中轉換數字嗎? 如果是這樣 - 變成什么?
嘗試隱式轉換:
SELECT
numberOne,
numberTwo,
((1.0*numberOne)*100/NULLIF(1.0*numberTwo, 0)) as PctOutput
在 SQL Server 中,結果始終與輸入的類型相同。 所以是的,您確實需要轉換輸入。
我通常使用convert(decimal(9,2),numberOne)
進行convert(decimal(9,2),numberOne)
但取決於您可能想要convert(real,numberOne)
或使用不同級別的精度。
您需要將 INT 中的數字轉換為浮點數或十進制數。
如果您使用文字,它們可能是十進制(NUMERIC),而不是浮點數(http://stackoverflow.com/questions/1072806/sql-server-calculation-with-numeric-literals)
請注意,如果您使用十進制,如果您的數字接近可能失去精度的邊界,您應該了解除法中的小數位數和精度規則:
**--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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.