Вопрос округления SQL - PullRequest
0 голосов
/ 26 марта 2019

Рассмотрим эти значения типа MONEY (выборочные значения, и они могут изменяться)

select 4796.529 + 1585.0414 + 350.9863 + 223.3549 + 127.6314+479.6529 + 158.5041

по какой-то причине мне нужно округлить каждое значение по шкале 3, как это

select round(4796.529,3)+ round(1585.0414,3)+ round(350.9863,3)+ round(223.3549,3)+ round(127.6314,3)+ round(479.6529,3)+ round(158.5041,3)

но когда я беру сумму, они показывают очень незначительное изменение. первая строка кода возвращает 7721.7000. а второй 7721.6990. Но это изменение не приемлемо. Каков наилучший способ решить эту проблему?

Ответы [ 2 ]

4 голосов
/ 26 марта 2019

Как бы то ни было, ваша проблема математическая, а не ошибка программирования.

  • 12,5 + 11,6 = 24,1
  • КРУГЛЫЙ (12,5) + КРУГЛЫЙ (11,6) = 25
  • КРУГЛЫЙ (12,5 + 11,6) = 24

Я бы поговорил с бизнесом и выяснил, где они хотят применить округление.

Также, как примечание стороны, MONEY - ужасный тип данных. Если вы можете, вы можете рассмотреть возможность перехода на DECIMAL. См. Следует ли выбирать типы данных MONEY или DECIMAL (x, y) в SQL Server?

3 голосов
/ 26 марта 2019

Когда вы округляете числа до их суммирования, вы получите другой результат, чем если бы вы округлили числа после того, как вы их суммировали. Просто как тот. Нет способа решить эту проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...