2016-07-22 16 views
1

因此,作爲查詢的一部分,我需要絕對準確(或儘可能靠近計算機)結果。SQL Server將不同的結果返回給物理計算器並顯示十進制數字

當我插入這個方程到SQL Server和運行它:

BEGIN 
    PRINT cast (0.99986333333333333333333333333333333333 * 9999.99 as decimal (38, 30)); 
END; 

我得到的結果是:

9998.623334700000000000000000000000 

然而,當我插上這些數字到我的身體計算器我得到的結果是:

9998.623335 

我需要知道哪一個是正確的,爲什麼?

SQL Server的答案是谷歌計算器生成的一個答案,另一個在線計算器的廣告極其準確。

任何人都可以向我展示/向我證明我應該使用哪一個?

乾杯

+0

我假設你的計算器可能捨入到小數點後6位? – thomas

回答

2

我想你已經通過,說明其他兩個來源備份SQL Server上這回答了你自己的問題。

而且,如果你投的每個操作數,所以你得到確切的(不是浮點)數學,你會得到同樣的答案:

BEGIN 
    PRINT CAST(CAST(0.99986333333333333333333333333333333333 AS decimal(38,30)) * CAST(9999.99 AS decimal(38,30)) as decimal (38, 30)); 
END; 

所以我相信在SQL Server的答案。

+1

是的。只要你在SQL Server中使用浮點數學出去那麼多地方,所有的賭注都是關閉的。如果你需要的是精確的計算,確保一切都是數字或小數。 – thomas

+1

感謝您的幫助,讓我瘋狂。 – Joe

相關問題