Ваша проблема округления связана с алгоритмом округления, используемым SQL Server.Я полагаю, что SQL Server использует алгоритм «округления до четности» (иногда называемый округлением Банкира).При округлении банкира цифра округляется в меньшую сторону, если младшая цифра справа от нее меньше пяти, или округляется в большую сторону, если младшая цифра справа от нее больше пяти.Если младшая значащая цифра справа от нее равна пяти, то цифра слева от пяти округляется до ближайшего четного числа.
В вашем примере 1890.124854, поскольку округление начинается ссамая правая цифра и работает слева, 8 заставляет 4 слева от него округляться до 5. У пятерки слева есть четное число (2), поэтому, так как оно уже четное, онооставляет это в покое.Таким образом, округление до двух знаков после запятой должно дать 1890.12.Однако, если ваш пример был 1890.134854, то, как округление работает справа налево, 8 округляет 4 до 5, а затем 3 рядом с 5 округляется до следующего четного числа, равного 4. Результатокругление до двух знаков после запятой должно привести к 1890,14.
Теория состоит в том, что 1890,125 не ближе ни к 1890,12, ни к 1890,13.Это точно между.Следовательно, всегда округлять каждую цифру слева от 5 будет нежелательное смещение вверх, которое может искажать вычисления в сторону искусственно высокого результата.Это смещение вверх становится более преувеличенным в сложных вычислениях или в тех, которые включают в себя несколько итераций, где цифра пять как наименее значимая цифра может встречаться много раз.Тем не менее, в общих расчетах число слева от 5 статистически так же вероятно, будет четным и нечетным.Из-за этого округление до четного числа приводит к тому, что вычисление статистически приближается к истинному среднему значению округленного числа.
Более того, почти все используют этот алгоритм "округления до четности".Много лет назад я развивался на языке программирования, который этого не делал.В нем использовалось более «традиционное» округление, когда все слева от 5 округлялось, независимо от того, является ли оно четным или нечетным.Мы столкнулись с проблемой смещения, о которой я упоминал выше.