So, here is it, converting from varbinary(8) to 8 byte float:
DECLARE @BinaryFloat AS VARBINARY(8); SET @BinaryFloat = 0x3FF199999999999A; -- Binary representation for 1.1 SELECT SIGN(CAST(@BinaryFloat AS BIGINT)) * (1.0 + (CAST(@BinaryFloat AS BIGINT) & 0x000FFFFFFFFFFFFF) * POWER(CAST(2 AS FLOAT), -52)) * POWER(CAST(2 AS FLOAT), (CAST(@BinaryFloat AS BIGINT) & 0x7ff0000000000000) / 0x0010000000000000 - 1023) -- Returns 1.1
And converting from varbinary(4) to 4 byte float:
DECLARE @BinaryFloat AS VARBINARY(4); SET @BinaryFloat = 0x3FC00000; -- Binary representation for 1.5 SELECT SIGN(CAST(@BinaryFloat AS INT)) * (1.0 + (CAST(@BinaryFloat AS INT) & 0x007FFFFF) * POWER(CAST(2 AS REAL), -23)) * POWER(CAST(2 AS REAL), (CAST(@BinaryFloat AS INT) & 0x7f800000) / 0x00800000 - 127) -- Returns 1.5Hope this helps and saves someone some time.
BTW, anyone knows why casting from varbinary to float is not supported in SQL Server?