2014-04-03 77 views
0

我一直在玩Numerics和c#128位對應小數,並注意到一些差異。首先,C#十進制是128位,而SQL數字佔用一個額外的字節。C#正確的替代SQL數字

我想知道的是:什麼是'正確'(快速)SQL兼容的方式來實現在C#中的數字/小數(就像一個'學術問題')?

哦,讓問題有點難度:

  • 我當然希望數據結構佔用儘可能少的字節越好。
  • 與C#中的正常'十進制'一樣,我希望能夠添加,減去,除法和乘法。

因爲17字節的數字是最難的,所以這真的讓我感興趣。其他精度只是其中的變體,可能需要另一個結構。

回答

2

System.Data.SqlTypes.SqlDecimal已經提供了這個。它也提供了算術。

+0

從MSDN注意:SqlDecimal具有與其相應的.NET Framework Decimal數據類型不同的基礎數據結構。十進制沒有精度的概念。它使用3個字節來存儲實際數據,因此具有28的最大比例和((-2^96到2^96)/ 10 ^(0到28))的範圍)。 SqlDecimal具有精度和規模。它使用4個無符號的4字節整數來存儲實際數據,因此具有最大精度和38的比例。數據範圍是 - 10^38 +1到10^38 - 1。 –

+0

@IainBallard應該讀作'warning :SqlDecimal是*正確*因爲它匹配SQL語義' –

+0

@RemusRusanu尼斯,我不知道這個類。儘管SqlDecimal使用20個字節而非17個字節,但我認爲在SQL中,這3個字節的元數據存儲在表模式中,這導致了17個字節。 (我知道這並不重要,因爲它們無論如何都是分配的,但是我們在這裏討論的是學術問題:-) – atlaste