我需要将一些C#代码与SQL Server进行接口对接,我想在将值存储到数据库中时,与我的C#代码所使用的精度完全相同。我在C#中使用了.NET的decimal
类型来表示该值。那么在SQL Server中,我应该使用哪种数据类型和精度来表示此值呢?
我知道 SQL Server 的decimal
类型很可能适合我的需求,但我的问题是,为了与.NET的decimal
类型匹配,我应该使用什么标度(scale)和精度(precision)?
我需要将一些C#代码与SQL Server进行接口对接,我想在将值存储到数据库中时,与我的C#代码所使用的精度完全相同。我在C#中使用了.NET的decimal
类型来表示该值。那么在SQL Server中,我应该使用哪种数据类型和精度来表示此值呢?
我知道 SQL Server 的decimal
类型很可能适合我的需求,但我的问题是,为了与.NET的decimal
类型匹配,我应该使用什么标度(scale)和精度(precision)?
Fluent nHibernate将System.Decimal映射为
decimal(19, 5)
decimal
类型(文档在此)。它允许您为数据库中的数字指定精度和比例,您可以将其设置为与C#代码相同。decimal
类型相同,我应该使用什么样的 precision
和 scale
值?(请注意,1.25 和 1.250 的问题对我们不相关。)” - EarlzSQL Server 中数字和十进制数的最大精度为 38 (在此处查看)。
decimal
精度应该是多少?默认值似乎是(18,0)
,这显然不是我想要的。 - Earlz或者您也可以考虑使用MONEY
数据类型:
如果你需要确保能够存储整个.NET十进制范围,上述内容是正确的。
如果你在应用程序中使用C#的十进制来处理货币,我认为Decimal(19, 4)就足够了。
简而言之,C# decimal是一个128位浮点精度数,它在Sql Server中没有精确等价物。
也许在未来的Sql Server版本中,微软会协调两种产品并支持一种直接将128位浮点精度数(clr / c# decimal等效)持久化到其数据库服务器上的方法。
我在处理非常大和非常小的数量时遇到了这个分析问题。 在我的情况下,我解决方案中所有比较数量都在64位范围内 [c# double / sql float] 能够处理。因此,在处理数量时,我选择使用[c# double / sql float],而在处理解决方案财务部分时,我选择使用[c# decimal / sql money]。