.NET Decimal = SQL中的内容?

时间:2008-10-23 15:11:18

标签: .net sql

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

我们希望存储最多9位小数精度的十进制数,并希望避免前端的舍入错误等。

阅读数据类型,在.NET中使用Decimal看起来是最好的选择,因为你不会得到舍入错误,尽管它比Double慢一点。

我们希望将其传递到数据库,并希望在通过图层移动数据时出现最小的转换问题。有什么建议吗?

3 个答案:

答案 0 :(得分:25)

所以我们在SQL Server上做了一些测试。看起来sql类型decimal无法完全存储任何.net十进制。

SQL Server可以存储最多38 decimal digits long的数字。这是小数点左侧和右侧的位数总和。您设置了“缩放”,它告诉SQL服务器为小数点右侧的数字保留多少个十进制数字。如果设置了一个刻度,那么它将取消小数点左边的位数。 (精度 - 比例=小数点左边的小数位数)

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

因此,如果您想获得尽可能多的精度并且您的数量足够小,那么您可以这样做:

decimal(38, 28)

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

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

decimal(38, 9)

这将允许您存储.net Decimal可以存储的最大数字,长度为29位。它会给你留下8位十进制数字。

如果这些听起来都没有吸引力,那么您可以将它们存储为varchar。这将允许您保存任何.net十进制,但它不允许您在SQL中对它们执行任何计算。

答案 1 :(得分:9)

我会在SQL Server中使用十进制类型

查看SQL Server Data Type Mappings (ADO.NET)

答案 2 :(得分:2)

如果您使用的是SQL Server,this table可能有助于数据类型映射。