2010-09-27 192 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