powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / почему при обычном делении теряется точность
5 сообщений из 5, страница 1 из 1
почему при обычном делении теряется точность
    #39919075
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
почему при обычном делении теряется точность?

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
use tempdb 
GO 
create table t(x decimal(38,20))
GO
INSERT INTO t VALUES (0.000000025),(0.000000045),(0.000000065)
GO 
SELECT X, X/SUM(X) OVER(), 0.0000000000001 * CAST((10000000000000.0 * X/SUM(X) OVER()) AS decimal(38,20))  FROM T
GO 
DROP table t
GO




X (No column name) (No column name)
0.00000002500000000000 0.185185 0.1851851851851851851
0.00000004500000000000 0.333333 0.3333333333333333333
0.00000006500000000000 0.481481 0.4814814814814814814
...
Рейтинг: 0 / 0
почему при обычном делении теряется точность
    #39919082
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a_voronin,

Сотни ответов на этом форуме.
Не разбирая - не влазит по расчётной разрядности - уменьшает точность.
сабж
https://docs.microsoft.com/en-us/sql/t-sql/data-types/precision-scale-and-length-transact-sql?view=sql-server-ver15
...
Рейтинг: 0 / 0
почему при обычном делении теряется точность
    #39919087
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
почему при обычном делении теряется точность
    #39919103
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaK,

e1 / e2 p1 - s1 + s2 + max(6, s1 + p2 + 1) max(6, s1 + p2 + 1)

магическое число 6
...
Рейтинг: 0 / 0
почему при обычном делении теряется точность
    #39919113
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a_voronin
TaPaK,

e1 / e2 p1 - s1 + s2 + max(6, s1 + p2 + 1) max(6, s1 + p2 + 1)

магическое число 6

что 6?

у вас сначало e1 + e2 max(s1, s2), потом деление. После сложение получает тип с большой целой, что уменьшит на делении точность.

рабейте и посмотрите вывод

Код: sql
1.
2.
3.
4.
5.
SELECT SQL_VARIANT_PROPERTY(SUM(X) OVER(),'Precision') FROM T
SELECT SQL_VARIANT_PROPERTY(SUM(X) OVER(),'Scale') FROM T

SELECT SQL_VARIANT_PROPERTY(X/SUM(X) OVER(),'Precision') FROM T
SELECT SQL_VARIANT_PROPERTY(X/SUM(X) OVER(),'Scale') FROM T


и потом в формулы
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / почему при обычном делении теряется точность
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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