SQL server real field将我的数字转换为普通格式

时间:2011-07-08 23:19:19

标签: sql sql-server sql-server-2008 type-conversion

我将一些数字存储在“真实”类型字段中。

我使用ADO.net从我的c#应用程序插入/读取值。当我在Server Management Studio中查询我的数据时,我可以看到它将我的数字转换为科学的正常格式,如:2,211221E + 07。我没有设置任何这样做,一切都是默认的。

我该如何避免这种行为?

MS SQL Server 2008 Express / .Net 4 / VS2010

1 个答案:

答案 0 :(得分:4)

它不会将您的实数(IEEE浮点数)转换为科学格式:这就是它在SSMS中显示的方式。以下是ADO.Net如何在SQL Server和.Net世界之间映射数据类型:http://msdn.microsoft.com/en-us/library/cc716729.aspx

对于浮点类型,SQL Server实现ISO数据类型float( n ),其中 n 是尾数的大小位(1-53包含)。 realfloat(24)的同义词; floatfloat(53)的同义词。

正如您所料,大小为1-24位的尾数列映射到System.Single;而尾数超过24位的那些映射到System.Double

Sql Server的moneysmallmoney数据类型与钱无关。它们只是固定精度小数,精度为4位小数(1/10000单位)。 Ado.Net将moneysmallmoney映射到System.Decimal,并将System.Decimal映射到money(没有映射到smallmoney)。此转换遇到阻抗不匹配的问题,但System.Decimal是十进制浮点格式。与SQL Server的money数据类型的转换可以导致

  • 精度损失。如果System.Decimal值在小数点右侧的位数超过4位,则会丢失额外的数字。
  • 获得精确度。如果`System.Decimal值小数点右边少于4位,在转换为货币时,它会以额外数字的形式获得精确度(小写点右边的零点。它从SQL Server读回时保持了额外的精度。