Синтаксис: - ROUND (numeric_expression , length [ ,function ])
параметр Thaird является "функция" в round
: - Таким образом, для значения, отличного от 0, указано (в третьем параметре), numeric_expression усекается. См. Ниже.
Из MSDN
Функция Является ли тип операции для выполнения. функция должна быть tinyint, smallint или int. Когда функция опущена или имеет значение 0 (по умолчанию), числовое выражение округляется. Когда значение, отличное от 0, задано , числовое выражение вырезается.
DECLARE @Amt Float
DECLARE @Tax Float
DECLARE @Qty TINYINT
SET @Amt=70.96
SET @Tax=5.26
SET @Qty=1
SELECT ROUND((@[email protected])/@Qty, 2,0)
Для второго запроса вы использовали, я сделал несколько изменений, чтобы она выглядела ниже.
SELECT ROUND(CONVERT(DECIMAL(10,2),CONVERT(DECIMAL(10,2),@AMT)-
CONVERT(DECIMAL(10,2),@TAX)/@QTY),2)
Причина снова я использовал новообращенный, ваше выражение неявно преобразуются в десятичном (15,6) типа данных. Для дополнительной проверки ниже запросов
SELECT Sql_variant_property(CONVERT(DECIMAL(10, 2), @AMT) - CONVERT(DECIMAL(10, 2), @TAX)/@QTY, 'BASETYPE'),
Sql_variant_property(CONVERT(DECIMAL(10, 2), @AMT) - CONVERT(DECIMAL(10, 2), @TAX)/@QTY, 'SCALE'),
Sql_variant_property(CONVERT(DECIMAL(10, 2), @AMT) - CONVERT(DECIMAL(10, 2), @TAX)/@QTY, 'PRECISION')
следует хранить суммы, которые необходимо точное представление в 'DECIMAL' типа данных, а не' FLOAT' тип данных ... Вы будете продолжать работать в проблемы с поплавками, что вы делаете, ... –
или использовать «деньги», если это денежные суммы – Zeina
Да, сначала исправить свою базу данных. Если, далее, ниже, вы хотите иметь дело с 0.000000003 (из любой валюты, с которой работаете) из-за накопленных ошибок округления –