2012-02-27 4 views
1

Я использую sql server 2000 и сталкиваюсь с круглой функцией, например, следующим оператором, работающим нормально.sql server round function не работает хорошо

SELECT ROUND(5 * 7.83, 1) 

Результат будет 39,2

Но когда я получаю эти значения из таблицы, это дает 39,1, то есть он обрезает и не сгонять.

SELECT ROUND(rate * qty, 1) 
    FROM tbl 

Результат будет 39,1

rate и qty типов столбцов данных являются поплавком. Вставьте 5 в qty и 7.83 в rate, затем проверьте его. Как я могу это исправить?

+0

Какой выходной сигнал выбрать скорость, кол-во от tb1? –

ответ

1

Преобразование таблицы значений в реальном,

SELECT ROUND(convert(real,rate)*convert(real,qty),1) 
1

Ваш пример просто запрос не отражает типов данных, участвующих.

Попробуйте эти два вместо:

SELECT ROUND(5 * 7.83, 1) 
SELECT ROUND(cast(5 as float) * cast(7.83 as float), 1) 

2-я один соответствует вашим типам данных таблицы. Типы данных с плавающей точкой не предназначены для точных десятичных вычислений, используйте вместо них десятичный тип.

What Every Computer Scientist Should Know About Floating-Point Arithmetic

, не теряя слишком много точности для нормальных чисел, вы можете просто бросить в десятичный на лета, чтобы заставить человек с понятной десятичной арифметикой, например,

SELECT ROUND(cast(rate as decimal(10,5)) * cast(qty as decimal(10,5), 1) 
    FROM tbl