2010-09-27 119 views
4

当我执行以下操作:SQL Server的数字格式

DECLARE @x float 
SET @x = 1234.5 
SELECT CONVERT(varbinary, @x) 

什么是返回的格式?我需要以某种方式从.net返回原始数字,并且我只有二进制值可用。

澄清:

上面的语句返回

(no column name) 
0x40934A0000000000 

不知怎的,我得值12345.5从二进制数据0x40934A0000000000回来。

+0

当你说你“需要得到原来的号码背”我假设你的意思是松散的。通过浮点往返可能会改变您的最后一位数字(这取决于数字有多少个小数位以及您将其格式化为多少位数)。 (当然,1234.5会出现很好,因为它在二进制浮点中是完全可表示的)。 – 2010-09-27 17:43:29

+0

松散地会好的,但我真的假设convert(float,convert(varbinary,@x))将返回未修改的数字@x,以便可以在C#中执行操作,只要您知道格式。 – erikkallen 2010-09-28 11:41:46

+0

@erikkallen:但是SQL语句中的十进制字符串是原始值,对吗? “convert(float,convert(varbinary,@x))”对浮点值进行往返,而不是十进制值。 – 2010-09-28 13:45:30

回答

0

显然格式是IEEE 64位,但字节顺序是BitConverter.ToDouble预期的相反。数量可使用此代码检索:

long bits = 0; 
for (int i = 0; i < 8; i++) 
    bits = (bits << 8) | data[i]; 
return BitConverter.Int64BitsToDouble(bits); 
0

C#到SQL Server varbinary的相应数据类型是byte[]。但是,如果要将其作为数字访问,为什么要将float转换为二进制文件?

+0

我知道数据类型,但是我需要知道实际内容的格式。我这样做的原因是,我在同一个(视图)列中有一堆不同类型的值,其中一些是UDT,所以我不能使用sql_variant。 – erikkallen 2010-09-27 14:29:48