什么是.NET十进制到SQL Server十进制的良好映射?

Ear*_*rlz 36 .net sql-server decimal

我不得不将一些C#代码与SQL Server连接起来,并且我希望在数据库中存储一个与C#代码一样多的精度.我使用.NET的decimal类型之一作为值.我将在SQL Server中使用什么数据类型/精度来获取此值?

我知道SQL Server decimal类型是最有可能符合我需要的类型.我的问题是,我使用什么规模和精度,以便它匹配.NET的decimal类型?

Ste*_*ger 24

Fluent nHibernate将System.Decimal映射为

decimal(19, 5)
Run Code Online (Sandbox Code Playgroud)

  • 顺便说一句,钱是十进制的(19,4) (2认同)

Chr*_* B. 13

您可以使用SQL Server decimal类型(此处的文档).这允许您为数据库中的数字指定精度和比例,您可以将其设置为与C#代码中的数字相同.

但是,您的问题似乎是将.NET十进制类型映射到SQL Server十进制类型.不幸的是,这不是直截了当的.SQL Server十进制数以最大精度覆盖-10 38 +1到10 38 -1的范围.但是,在.NET中,它可以覆盖±10 -28到±7.9×10 28之间的任何位置,具体取决于数字.

原因是,在内部,.NET处理与浮点非常相似的小数 - 它将它存储为一对数字,尾数和指数.如果你有一个特别大的尾数,你将失去一些精度.从本质上讲,.NET允许您混合具有高和低规模的数字; SQL Server要求您提前为给定列选择它.

简而言之,为了您的目的,您需要确定有效的十进制值范围,并确保您的程序和数据库都可以处理它.无论如何,你需要为你的程序做这件事(如果你将10 -28和7.9×10 28之类的值混合在一起,你无论如何也不能依赖于十进制类型).

  • 我要问的是SQL Server对于`precision`和`scale`应该使用的值是什么,这样它就像.NET`cimal`一样精确?(注意1.25和1.250问题与我们无关) (3认同)