Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Дробный результат деления в селекте?!  [new]
RumataD
Member

Откуда: Уфа
Сообщений: 135
Кто-нибудь знает, почему запрос вида:

select convert(numeric(5,2), (2 / 100))

возвращает 0.00

а

select convert(numeric(5,2), (100 / 3)) - 33.00

это что, есть принципиальная невозможность вычислить в селекте
какое-либо не целочисленное выражение?
24 июн 09, 12:58    [7337156]     Ответить | Цитировать Сообщить модератору
 Re: Дробный результат деления в селекте?!  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381

> Кто-нибудь знает, почему запрос вида:
>
> select convert(numeric(5,2), (2 / 100))
>
> возвращает 0.00

2 - константа типа int
100 - константа типа int
деление int/int - целочисленное.
а приведение к numeric происходит уже _после_ деления.


Posted via ActualForum NNTP Server 1.4

24 июн 09, 13:01    [7337176]     Ответить | Цитировать Сообщить модератору
 Re: Дробный результат деления в селекте?!  [new]
iljy
Member

Откуда:
Сообщений: 8711
RumataD,

вы выполняете целочисленное деление 2/100. хотите с плавающей точкой - пишите так 2.0/100
24 июн 09, 13:01    [7337179]     Ответить | Цитировать Сообщить модератору
 Re: Дробный результат деления в селекте?!  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
RumataD
Кто-нибудь знает, почему запрос вида:

select convert(numeric(5,2), (2 / 100))

возвращает 0.00

а

select convert(numeric(5,2), (100 / 3)) - 33.00

это что, есть принципиальная невозможность вычислить в селекте
какое-либо не целочисленное выражение?
100 и 3 сервер считает числами целого типа, потому что в таком написании нет ни одного признака числа с десятичной точкой.
Результат деления двух целых чисел - это целое число.
Если вулимое меньше делителя, то получится 0.
Иначе у результата будут отброшены все знаки после десятичной точки.
Надо так:
select convert(numeric(5,2), (100. / 3))
24 июн 09, 13:02    [7337183]     Ответить | Цитировать Сообщить модератору
 Re: Дробный результат деления в селекте?!  [new]
Mad Gary
Member

Откуда:
Сообщений: 5
daw,
а ты пиши 2.00/100.00
24 июн 09, 13:03    [7337197]     Ответить | Цитировать Сообщить модератору
 Re: Дробный результат деления в селекте?!  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Что-то сегодня с клавиатурой у меня
iap
RumataD
Кто-нибудь знает, почему запрос вида:

select convert(numeric(5,2), (2 / 100))

возвращает 0.00

а

select convert(numeric(5,2), (100 / 3)) - 33.00

это что, есть принципиальная невозможность вычислить в селекте
какое-либо не целочисленное выражение?
100 и 3 сервер считает числами целого типа, потому что в таком написании нет ни одного признака числа с десятичной точкой.
Результат деления двух целых чисел - это целое число.
Если вуделимое меньше делителя, то получится 0.
Иначе у результата будут отброшены все знаки после десятичной точки.
Надо так:
select convert(numeric(5,2), (100. / 3))
24 июн 09, 13:03    [7337200]     Ответить | Цитировать Сообщить модератору
 Re: Дробный результат деления в селекте?!  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Mad Gary
daw,
а ты пиши 2.00/100.00
действительно!
24 июн 09, 13:04    [7337206]     Ответить | Цитировать Сообщить модератору
 Re: Дробный результат деления в селекте?!  [new]
RumataD
Member

Откуда: Уфа
Сообщений: 135
Спасибо, разобрался
24 июн 09, 14:01    [7337620]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить