я вижу какое-то странное поведение при округлении в SQL Server 2008. Учитывая следующий код:Округление проблемы с SQL Server и РЕАЛЬНЫМ типом данными
DECLARE @Value REAL
SELECT @Value = .35
SELECT ROUND(@Value, 1)
Я бы ожидать, что значение будет 0,4, однако он выводит 0,3. Я должен предположить, что это потому, что хранимое значение на самом деле меньше 0,35, что-то вроде .34999999999999. Это так, или я делаю что-то неправильно? Есть ли способ гарантировать, что это ведет себя так, как ожидалось, по крайней мере, от видимой ценности?
Что вы получаете, если '@ Value' имеет тип' DECIMAL (10,2) '? Помните, что 'REAL' - приблизительный тип данных, то есть он действительно может хранить 0,35 как .34999999999999 или что-то подобное. –
Использование DECIMAL (10,2) дает ожидаемый результат. К сожалению, моя база данных уже использует REAL для этого. Возможно, мне нужно посмотреть на конвертацию. –
Да, я бы предложил конвертировать. 'REAL' и' FLOAT' не являются типом данных, которые вы должны использовать, если вы ожидаете, что логическое (например, более приблизительное, чем то, что большинство из нас научит вам) округлить. –