2012-02-27 90 views
1

我正在使用SQL Server 2000和麪臨輪功能問題像下面的語句工作正常。SQL服務器輪功能不能正常工作

SELECT ROUND(5 * 7.83, 1) 

其結果將是39.2

但是,當我從表中獲取這些值,它給出39.1,這意味着它截斷,不圓了。

SELECT ROUND(rate * qty, 1) 
    FROM tbl 

其結果將是39.1

rateqty列中的數據類型是浮動。將qty和7.83分別插入到rate中,然後檢查它。我如何解決它?

+0

什麼是選擇率的輸出,從tb1的數量? – 2012-02-27 04:43:13

回答

1

轉換表中的值實際,

SELECT ROUND(convert(real,rate)*convert(real,qty),1) 
1

你的樣品根本查詢不反光所涉及的數據類型。

嘗試這兩個替代:

SELECT ROUND(5 * 7.83, 1) 
SELECT ROUND(cast(5 as float) * cast(7.83 as float), 1) 

:第二個表格的數據類型相匹配。浮點數據類型不是用於精確的十進制計算,而是使用十進制類型。

What Every Computer Scientist Should Know About Floating-Point Arithmetic

沒有失去太多精度在正常的數字,你可以轉換爲十進制的飛行,迫使人類可理解的小數點算術,例如

SELECT ROUND(cast(rate as decimal(10,5)) * cast(qty as decimal(10,5), 1) 
    FROM tbl