在SQL中,用于表示.NET中Decimal的最佳数据类型是什么?
我们希望存储小数点精度高达9位的十进制数,并避免在前端出现舍入误差等问题。
阅读有关数据类型的文章,似乎在.NET中使用Decimal是最佳选择,因为它不会产生舍入误差,尽管比Double慢一些。
我们希望将此延续到数据库,并在数据传输过程中尽量减少转换问题。有什么建议吗?
我们在 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中无法对它们进行计算。