SQL中用于表示.NET中的Decimal的最佳数据类型是什么?
我们希望存储最多9位小数精度的十进制数,并希望避免前端的舍入错误等.
阅读数据类型,在.NET中使用Decimal看起来是最好的选择,因为你不会得到舍入错误,尽管它比Double慢一点.
我们希望将其传递到数据库,并且在通过层移动数据时需要最小的转换问题.有什么建议?
所以我们在SQL Server上做了一些测试.看起来sql类型decimal
不能完全存储任何.net十进制.
SQL Server可以存储长度最多为38位的数字.这是小数点左侧和右侧的位数总和.您设置了"缩放",它告诉SQL服务器为小数点右侧的数字保留多少个十进制数字.如果设置了一个刻度,那么它将取消小数点左边的位数.(精度 - 比例=小数点左侧的小数位数)
.NET可以表示小数点右侧最多28位,左侧29位.这将需要SQL Server中的精度为57,但最大可用性为38.
因此,如果您想获得尽可能多的精度并且您的数量足够小,那么您可以这样做:
decimal(38, 28)
那会让你左边有10位数字,右边有28位数字.因此,任何大于9999999999的数字都无法表示,但在进行货币类型交易时,您不会失去精度.
另一方面,如果您的数字非常大,您可以使用此声明存储它们:
decimal(38, 9)
这将允许您存储.net Decimal可以存储的最大数字,长度为29位.它只会给你8个十进制数字的精度.
如果没有一个听起来很吸引人,那么你可以将它们存储为varchar
.这将允许您保存任何.net十进制,但它不会让您在SQL中对它们执行任何计算.
我会在SQL Server中使用十进制类型
看看SQL Server数据类型映射(ADO.NET)