2016-07-30 56 views
0
浮法更準確

This post具有下面的代碼:SQL服務器:爲什麼不是十進制

DECLARE @A DECIMAL(3, 0), @B DECIMAL(18, 0), @F FLOAT 

SET @A = 3 
SET @B = 3 
SET @F = 3 

SELECT 1/@A * 3.0, 1/@B * 3.0, 1/@F * 3.0 
SELECT 1/@A * 3 , 1/@B * 3 , 1/@F * 3 

使用浮動,表達式的值爲1.使用十進制,表達小數點後的計算結果爲787-9的一些集合。爲什麼float在這種情況下會得出更準確的答案?我認爲Decimal更準確/精確地根據Difference between numeric, float and decimal in SQL ServerUse Float or Decimal for Accounting Application Dollar Amount?

回答

3

您聲明的十進制值是固定寬度,小數位後沒有點。這會影響計算。

對於如何計算包含十進制數的算術表達式的精度,SQL Server有一個相當複雜的公式。詳情請見documentation。您還需要考慮到數字常量是十進制格式,而不是數字。

另外,最後,您需要將您想要的精度轉換回十進制格式。在這種情況下,您可能會發現floatdecimal是等效的。

+0

謝謝。那個[post](http://www.sqlservercentral.com/Forums/Topic522397-360-1.aspx#bm522459)給了我暫停使用'decimal'(而不是'float')財務數據。從你的參考文檔中,我發現[這篇文章](https://msdn.microsoft.com/en-us/library/ms190309.aspx)顯示浮動更高的優先級。因此,select語句中的calc被轉換爲'float'。如果我將其轉換回「decimal」,它會返回與您所記錄的相同的值。 – James

相關問題