Функция ROUND
Рассмотрим такую задачу.
Выполнив запрос
select AVG(hd) as avg_hd from pc;
[[ column ]] |
---|
[[ value ]] |
avg_hd |
---|
13.6667 |
Чтобы выполнить требуемое округление можно воспользоваться функцией ROUND:
select round(AVG(hd),2) as avg_hd from pc;
[[ column ]] |
---|
[[ value ]] |
avg_hd |
---|
13.67 |
Второй аргумент этой функции как раз указывает число десятичных знаков результата.
Как видно, результат был округлен по арифметическим правилам. Однако у функции ROUND есть третий необязательный аргумент, который говорит о том, округлять ли результат (значение 0 - принимается по умолчанию) или отбрасывать цифры сверх удерживаемых (ненулевое значение).
Т.е. если мы перепишем наш запрос так:
select round(AVG(hd),2,1) as avg_hd from pc;
[[ column ]] |
---|
[[ value ]] |
avg_hd |
---|
13.66 |
Кстати, округлять можно до любого знака, не только десятичного. Например, чтобы округлять до десятков, сотен и т.д., используются отрицательные значения второго аргумента. Следующий запрос округляет результат до десятков.
select round(AVG(hd),-1) as avg_hd from pc;
[[ column ]] |
---|
[[ value ]] |
avg_hd |
---|
10 |
Следует отметить, что функция ROUND выполняет округление, но не меняет тип результата. Т.е. если аргумент будет иметь тип dec(12,6), то и результат округления будет того же типа, а именно,
avg_hd |
---|
13.67 |
В этом легко убедиться, выполнив запрос
select round(cast(AVG(hd) as dec(12,6)),2) as avg_hd from pc;
Поэтому, если вы хотите избавиться от хвостовых нулей, используйте преобразование к нужному вам типу, например, dec(12,2). Тогда нам и функция ROUND не потребуется. :-)
select cast(AVG(hd) as DEC(12,2)) as avg_hd from pc;
[[ column ]] |
---|
[[ value ]] |