C # двоичный массив в десятичную? - PullRequest
1 голос
/ 19 января 2010

В SQL работает следующее cast([comlum] as Decimal(18,4))

Как сделать то же преобразование (из двоичных данных) в C #?


тип данных varbinary в SQLЗагрузка C # в байт [], поэтому я хочу преобразовать байт [] в десятичное или двойное число?

Запрос Sql: select cast([column_A] as decimal(18,4), [column_A] from table

результат: 191128.0000 0x1204000180D1EB71

Я надеюсьчтобы получить значение как 191128.0000 в C #


Потому что я использую Entity FrameworkИтак, есть этот вопрос

Ответы [ 2 ]

4 голосов
/ 31 октября 2011

Чтобы привести байтовый массив к десятичному знаку C # и наоборот, вы можете использовать этот фрагмент кода:

decimal d = 12.3456789m;

// decimal to byte[]
byte[] bytes = new byte[16];
Buffer.BlockCopy(decimal.GetBits(d), 0, bytes, 0, 16);

// byte[] to decimal
int[] bits = new int[4];
Buffer.BlockCopy(bytes, 0, bits, 0, 16);
Console.WriteLine(new decimal(bits));  // 12.3456789
3 голосов
/ 19 января 2010

Хорошо, что содержит двоичный массив? Это существующий decimal, представленный как byte[]? В отличие от таких вещей, как float / double, нет общего / общего понимания decimal как byte[].

Но если - .NET decimal, вы можете использовать перегрузку new decimal(int[]) - но сначала вам нужно будет упаковать байты в целые числа; а это значит, что вам нужно знать порядок байтов ...

Или массив на самом деле double? В этом случае BitConverter должен помочь.


Увидев обновление вопроса, я подозреваю, что вы собираетесь иметь для приведения этих данных (в TSQL) до того, как выйдет из SQL Server или выкопать специфичная для реализации кодировка, используемая для упаковки данных в SQL Server (что может быть хрупким, и IMO, вероятно, не должен покидать сервер). Существует тип SqlDecimal, но этот также не принимает byte[].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...