разница между деньгами и целочисленным типом данных - PullRequest
3 голосов
/ 19 марта 2011

В чем разница между типом данных money и bigint на сервере sql?

Ответы [ 2 ]

10 голосов
/ 19 марта 2011

Диапазон / Точность

bigint диапазон составляет от -9,223,372,036,854,775,808 до 9,223,372,036,854,775,807

money диапазон составляет от -922,337,203,685,477.5808 до 922,337,203,685,477.5807

Хранение

Они оба занимают 8 байт памяти и хранятся в виде больших целых чисел, с той лишь разницей, что SQL Server понимает, что 4 самые правильные цифры идут после десятичной точки.

Если вы сделаете

declare @m money = 1.2345
declare @b bigint = 12345

select cast(@m as BINARY(8)), cast(@b as BINARY(8))

Вы видите, что хранилище одинаковое.

------------------ ------------------
0x0000000000003039 0x0000000000003039

Поведение

Однако тип данных money не ведет себя точно так, как если бы вы просто использовали bigint сам.Следует избегать вычислений с money , но они все же более точны, чем аналогичное целочисленное деление.

declare @m money = 1.9999, @m2 money = 1

select @m/@m2 /*Returns 1.9999*/

declare @b bigint = 19999, @b2 bigint = 10000

select @b/@b2 /*Returns 1*/
0 голосов
/ 19 марта 2011

Я думаю, это довольно просто;bigint не может содержать десятичную точку, однако money может.

Пример

bigint -------------- деньги

44 (правильно) ------- 44 (правильно) и в 44,0000 дБ будут сохранены

4.4 (неправильно) ---- 4.4 (правильно) и в дб 4.4000 будет сохранено

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