Округлите SQL String Data для исправления десятичного знака, затем верните строковые данные без ошибок с плавающей запятой - PullRequest
0 голосов
/ 10 апреля 2020

Мы пытаемся внедрить систему отчетности с использованием программного обеспечения, которое запрашивает нашу базу данных SQL. В связи с различными обстоятельствами нам необходимо округлить данные в запросах SQL. Наша цель - избежать ошибок с плавающей запятой, нежелательных конечных нулей и сложности вложенных функций (если это возможно).

Входящие данные всегда имеют тип nvarchar (...) и должны оставаться в строковом формате, что вызывает проблемы для нас. Вот пример того, что я имею в виду (проверено с помощью w3schools.com):

SELECT 
STR(235.415, 10, 2) AS StringValue1,
STR('235.415', 10, 2) AS StringValue2,
STR(ROUND(235.415, 2),10,2) AS RoundValue1,
STR(ROUND('235.415', 2),10,2) AS RoundValue2,
STR(CAST('235.415' As NUMERIC(8,2)),10,2) As CastValue1

И результат:

SQL Output

Я знаю, что проблема заключается в преобразовании в тип данных с плавающей запятой при обработке строк. Я думаю, что последний вариант, то есть приведение к цифре c, является ответом на мою проблему. Однако я не могу сказать, является ли этот вывод правильным, потому что CAST гарантирует, что не будет ошибки, или потому что мне повезло с этим конкретным c экземпляром.

Есть ли какой-либо тип SQL функция округления (или комбинация функций), которая принимает строковый ввод, выводит строковые данные и не использует арифметику с плавающей запятой c? - Заранее спасибо!

1 Ответ

1 голос
/ 13 апреля 2020

NUMERIC / DECIMAL и MONEY не используют арифметику с плавающей запятой c. Фактически это целые числа с фиксированной запятой.

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

...