2014-04-03 40 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