2011-07-26 60 views
3

我正在爲金融交易的準確性非常重要的銀行機構構建應用程序。我正在考慮在SQL Server中使用數據類型MoneySQL Server中MONEY數據類型的準確性需要幫助

所以我需要建議我使用的數據類型是否足以提供準確性?我也想知道哪一個更好,如果我使用numeric數據類型或Money數據類型?

在此先感謝

+0

一些爭論/反對金錢在這裏:http://sqlblog.com/blogs/aaron_bertrand/archive/2008/04/27/performance-storage-comparisons-money-vs-decimal.aspx和這裏:http:// groups.google.com/group/microsoft.public.sqlserver.server/browse_thread/thread/e19bf068e208dd5b/f79e614829931537?hl=en&lnk=st&q=author:kass+money+accuracy&pli=1 –

回答

5

SQL Server Books Online快速搜索會發現....

money 
    -922,337,203,685,477.5808 to 922,337,203,685,477.5807  8 bytes 

smallmoney 
    - 214,748.3648 to 214,748.3647       4 bytes 

的錢和smallmoney數據類型是精確到的貨幣單位的萬分之一他們代表。 (這是小數點後四位)已經固定精度和範圍


數字數據類型。

decimal[ (p[ ,s])] and numeric[ (p[ ,s])] 

固定精度和刻度數字。當使用最大精度時,有效值爲,範圍從 - 10^38 +1到10^38 - 1。十進制的ISO同義詞是dec和dec(p,s)。數字在功能上等同於小數。

P(精度)

的可存儲,同時向左邊和小數點右邊十進制數字的最大總數。精度必須通過的38的最大精度爲1的值。默認精度爲18

S(刻度)

可存儲到的右側的十進制數字的最大位數小數點。比例必須是從0到p的值。只有在指定了精度的情況下才能指定比例。默認比例是0;因此,0 < = s < = p。根據精度,最大存儲大小會有所不同。


Numeric(或Decimal這是相同的),肯定有更大的範圍 - 你可以調整你之前或小數點後多少位數字需要。

在另一方面 - 甚至Money精確到十分之一的美元或歐元或任何貨幣你感興趣的千分之一 - 這是通常足夠,即使是銀行....

所以基本上:

  • 如果小數點之前需要小數點後超過4顯著位,或15位以上 - 挑NUMERIC/DECIMAL

  • 否則,MONEY將會很好