.NET Decimal在SQL中对应什么?

16

在SQL中,用于表示.NET中Decimal的最佳数据类型是什么?

我们希望存储小数点精度高达9位的十进制数,并避免在前端出现舍入误差等问题。

阅读有关数据类型的文章,似乎在.NET中使用Decimal是最佳选择,因为它不会产生舍入误差,尽管比Double慢一些。

我们希望将此延续到数据库,并在数据传输过程中尽量减少转换问题。有什么建议吗?

3个回答

25

我们在 SQL Server 上进行了一些测试。看起来,SQL 类型 decimal 无法完全存储任何 .NET decimal。

SQL Server 可以存储长达38位小数位数的数字。这是小数点左右数字的总和。您可以设置“比例”,告诉 SQL Server 为小数点右侧的数字保留多少个小数位。如果设置了比例,则将其从小数点左侧数字中减去。(精度 - 比例 = 小数点左侧的小数位数)

.NET 可以表示小数点右侧最多28位数字和左侧29位。这需要在 SQL Server 中设置57的精度,但最大可用的精度是38。

因此,如果您想获得尽可能多的精度并且您的数字足够小,则可以使用以下方法:

decimal(38, 28)

这将使你的数字左边有10个数字,右边有28个数字。因此,任何大于9999999999的数字都无法表示,但在进行货币交易类型时不会失去精度。

另一方面,如果您的数字非常大,您可以使用以下声明来存储它们:

decimal(38, 9)

这将让您存储最大的.NET Decimal数字,其长度为29位数字。这将使您只有8个小数位的精度。

如果以上方法都不可行,那么您可以将它们存储为varchar类型。这样可以保存任何.NET Decimal数字,但在SQL中无法对它们进行计算。


9

2
如果您正在使用SQL Server,这个表格可能有助于数据类型映射。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接