С SQL Server 2008R2 я получаю разницу знака при округлении «того же» числа, что и десятичное или плавающее.Избавление от отрицательного нулевого значения для float
Пример кода, показывающий разницу:
DECLARE @f float = -0.00001;
DECLARE @d decimal = -0.00001;
PRINT CONVERT(varchar,ROUND(@f, 4)) --- outputs -0
PRINT CONVERT(varchar,ROUND(@d, 4)) --- outputs 0
Мне нужно округлить значение с плавающей точкой в 0, не -0.
Я думаю, что это сводится к спецификации IEEE 754, которая определяет два нулевого представления (положительные и отрицательные), тогда как десятичные числа имеют только один ноль. Я думаю, что оператор равенства по поплавкам справляется с этим, но мне приходится сравнивать две строки с плавающей точкой AS для соображений совместимости.
Есть функция/опция, чтобы избавиться от отрицательных нулей (по крайней мере, при преобразовании в строку)?
Уродливые, но эффективное решение будет следующим образом: 'ПРЕОБРАЗОВАНИЯ (VARCHAR, случай, когда ROUND (@f, 4) = -0 ТОГДА 0 ИНАЧЕ ROUND (@f, 4) КОНЕЦ)' ' –
ПЕЧАТЬ abs (CONVERT (varchar, ROUND (@f, 4))) ' –
@RahulTripathi - Это также преобразует' -4' в '+ 4' –