powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / SQL 2016. Деление чисел. Получаются разные результаты
9 сообщений из 9, страница 1 из 1
SQL 2016. Деление чисел. Получаются разные результаты
    #39969715
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
...
Рейтинг: 0 / 0
SQL 2016. Деление чисел. Получаются разные результаты
    #39969719
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Результаты разные, потому что используются разные типы данных.
...
Рейтинг: 0 / 0
SQL 2016. Деление чисел. Получаются разные результаты
    #39969720
AlexanP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А как же преобразование типов ?
Почему Numeric/Numeric дает хуже точность ?
...
Рейтинг: 0 / 0
SQL 2016. Деление чисел. Получаются разные результаты
    #39969728
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
SQL 2016. Деление чисел. Получаются разные результаты
    #39969755
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
З.Ы. int по умолчанию конвертится в numeric(10,0) в данной ситуации
...
Рейтинг: 0 / 0
SQL 2016. Деление чисел. Получаются разные результаты
    #39969803
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
SQL 2016. Деление чисел. Получаются разные результаты
    #39969806
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: 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
SQL 2016. Деление чисел. Получаются разные результаты
    #39969828
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вброшу свой вариант

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



0.071232876712328767123288
...
Рейтинг: 0 / 0
SQL 2016. Деление чисел. Получаются разные результаты
    #39970055
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
9 сообщений из 9, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / SQL 2016. Деление чисел. Получаются разные результаты
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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