簡體   English   中英

獲得准確的百分比計算

[英]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)

請注意,如果您使用十進制,如果您的數字接近可能失去精度的邊界,您應該了解除法中的小數位數和精度規則:

http://msdn.microsoft.com/en-us/library/ms190476.aspx

    **--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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM