Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / SQL 2016. Деление чисел. Получаются разные результаты / 9 сообщений из 9, страница 1 из 1
16.06.2020, 13:01
    #39969715
AlexanP
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL 2016. Деление чисел. Получаются разные результаты
Почему два запроса показывают разные результаты ?
Надо разделить 26 на 365.

1) select 26/convert(numeric(30,20),365)
результат = 0.0712328767123287

2) select convert(numeric(30,20),26)/convert(numeric(30,20),365)
результат = 0.07123287
...
Рейтинг: 0 / 0
16.06.2020, 13:06
    #39969719
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL 2016. Деление чисел. Получаются разные результаты
Результаты разные, потому что используются разные типы данных.
...
Рейтинг: 0 / 0
16.06.2020, 13:09
    #39969720
AlexanP
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL 2016. Деление чисел. Получаются разные результаты
А как же преобразование типов ?
Почему Numeric/Numeric дает хуже точность ?
...
Рейтинг: 0 / 0
16.06.2020, 13:19
    #39969728
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL 2016. Деление чисел. Получаются разные результаты
AlexanP
А как же преобразование типов ?
Почему Numeric/Numeric дает хуже точность ?
Потому что надо нужной точности нужно использовать типы c правильными prcision / scale: https://docs.microsoft.com/ru-ru/sql/t-sql/data-types/precision-scale-and-length-transact-sql?view=sql-server-ver15
...
Рейтинг: 0 / 0
16.06.2020, 14:02
    #39969755
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL 2016. Деление чисел. Получаются разные результаты
З.Ы. int по умолчанию конвертится в numeric(10,0) в данной ситуации
...
Рейтинг: 0 / 0
16.06.2020, 15:31
    #39969803
uaggster
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL 2016. Деление чисел. Получаются разные результаты
AlexanP
Почему два запроса показывают разные результаты ?
Надо разделить 26 на 365.

1) select 26/convert(numeric(30,20),365)
результат = 0.0712328767123287

2) select convert(numeric(30,20),26)/convert(numeric(30,20),365)
результат = 0.07123287

А любимый трюк лентяев:
select 26*1.0/convert(numeric(30,20),365)
Дает 0.07123287671232
...
Рейтинг: 0 / 0
16.06.2020, 15:41
    #39969806
uaggster
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL 2016. Деление чисел. Получаются разные результаты
Код: sql
1.
2.
3.
Select * from sys.dm_exec_describe_first_result_set('select 26/convert(numeric(30,20),365)', NULL, 0) t
Select * from sys.dm_exec_describe_first_result_set('select 26*1.0/convert(numeric(30,20),365)', NULL, 0) t
Select * from sys.dm_exec_describe_first_result_set('select convert(numeric(30,20),26)/convert(numeric(30,20),365)', NULL, 0) t


Дает
numeric(38,16)
numeric(38,14)
numeric(38,8)
...
Рейтинг: 0 / 0
16.06.2020, 16:31
    #39969828
a_voronin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL 2016. Деление чисел. Получаются разные результаты
Вброшу свой вариант

Код: sql
1.
select 0.0000000001 * (26.0/(365.0 * 0.0000000001))



0.071232876712328767123288
...
Рейтинг: 0 / 0
17.06.2020, 10:15
    #39970055
uaggster
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL 2016. Деление чисел. Получаются разные результаты
a_voronin
Вброшу свой вариант

Код: sql
1.
select 0.0000000001 * (26.0/(365.0 * 0.0000000001))



0.071232876712328767123288

Да нууууу.
Слишком сложно!

select 26*1.00000000000000000000/365
0.071232876712328767123287

Select * from sys.dm_exec_describe_first_result_set('select 26*1.00000000000000000000/365', NULL, 0) t
numeric(28,24)
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / SQL 2016. Деление чисел. Получаются разные результаты / 9 сообщений из 9, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]