我将一些数字存储在“真实”类型字段中。
我使用ADO.net从我的c#应用程序插入/读取值。当我在Server Management Studio中查询我的数据时,我可以看到它将我的数字转换为科学的正常格式,如:2,211221E + 07。我没有设置任何这样做,一切都是默认的。
我该如何避免这种行为?
MS SQL Server 2008 Express / .Net 4 / VS2010
答案 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包含)。 real
是float(24)
的同义词; float
是float(53)
的同义词。
正如您所料,大小为1-24位的尾数列映射到System.Single
;而尾数超过24位的那些映射到System.Double
。
Sql Server的money
和smallmoney
数据类型与钱无关。它们只是固定精度小数,精度为4位小数(1/10000单位)。 Ado.Net将money
和smallmoney
映射到System.Decimal
,并将System.Decimal
映射到money
(没有映射到smallmoney
)。此转换遇到阻抗不匹配的问题,但System.Decimal
是十进制浮点格式。与SQL Server的money
数据类型的转换可以导致
System.Decimal
值在小数点右侧的位数超过4位,则会丢失额外的数字。