Como arredondar apenas para cima?

Firebird

22/04/2012

Pessoal,

Fiz esta procedure para calcular a média de algumas disciplinas, utilizei a função ROUND para arredondar as médias, mas gostaria que só fossem arredondas as médias para cima, ou seja, quando a condição de arredondamento for para baixo deve-se conservar a média como está e não arredondar.

Exemplo: (gostaria que ficasse assim)

5,7 - arredonda para 6,0
5,4 - conserva para 5,4


mas fica assim;

5,7 - arredonda para 6,0
5,4 - arredonda para 5,0




begin
for
select n.disciplina_notas,
d.nome_disciplina,
count(*) as qtde_notas,

(select n1.nota
from notas n1
where n1.disciplina_notas = n.disciplina_notas
and n1.matricula_aluno_notas = n.matricula_aluno_notas
and n1.codigo_turma_notas = n.codigo_turma_notas
and n1.bimestre = 1 BIMESTRE) nota_1,

(select n2.nota
from notas n2
where n2.disciplina_notas = n.disciplina_notas
and n2.matricula_aluno_notas = n.matricula_aluno_notas
and n2.codigo_turma_notas = n.codigo_turma_notas
and n2.bimestre = 2 BIMESTRE) nota_2,

(select n3.nota
from notas n3
where n3.disciplina_notas = n.disciplina_notas
and n3.matricula_aluno_notas = n.matricula_aluno_notas
and n3.codigo_turma_notas = n.codigo_turma_notas
and n3.bimestre = 3 BIMESTRE) nota_3,

(select n4.nota
from notas n4
where n4.disciplina_notas = n.disciplina_notas
and n4.matricula_aluno_notas = n.matricula_aluno_notas
and n4.codigo_turma_notas = n.codigo_turma_notas
and n4.bimestre = 4 BIMESTRE) nota_4,


(select n5.nota
from notas n5
where n5.disciplina_notas = n.disciplina_notas
and n5.matricula_aluno_notas = n.matricula_aluno_notas
and n5.codigo_turma_notas = n.codigo_turma_notas
and n5.bimestre = 2 RECUPERACAO) nota_5,


(select n6.nota
from notas n6
where n6.disciplina_notas = n.disciplina_notas
and n6.matricula_aluno_notas = n.matricula_aluno_notas
and n6.codigo_turma_notas = n.codigo_turma_notas
and n6.bimestre = 3 RECUPERACAO) nota_6,


(select n7.nota
from notas n7
where n7.disciplina_notas = n.disciplina_notas
and n7.matricula_aluno_notas = n.matricula_aluno_notas
and n7.codigo_turma_notas = n.codigo_turma_notas
and n7.bimestre = 4 RECUPERACAO) nota_7


from notas n left join disciplina d on n.disciplina_notas = d.codigo
where n.matricula_aluno_notas =:MATRICULA_ALUNO
and n.codigo_turma_notas =:CODIGO_TURMA

group by n.disciplina_notas,
d.nome_disciplina,
n.matricula_aluno_notas,
n.matricula_aluno_notas,
n.codigo_turma_notas

into :CODIGO,
:NOME_DISCIPLINA,
:QTDE_NOTAS_ANO,
:nota1,
:nota2,
:nota3,
:nota4,
:nota5,
:nota6,
:nota7

do
begin
begin
if ((NOTA1) < 6 and (NOTA5) > (NOTA1)) then
NOTA1 = NOTA5;
else
NOTA1 = NOTA1;
end

begin
if ((NOTA2) < 6 and (NOTA5) > (nota2)) then
NOTA2 = NOTA5;
else
NOTA2 = NOTA2;
end

begin
if ((NOTA3) < 6 and (NOTA6) > (nota3)) then
NOTA3 = NOTA6;
else
NOTA3 = NOTA3;
end

begin
if ((NOTA4) < 6 and (NOTA6) > (NOTA4)) then
NOTA4 = NOTA6;
else
NOTA4 = NOTA4;
end
media_bimestral = round((nota1 + nota2 + nota3 + nota4)/4);
media_bimestral_final = (media_bimestral + coalesce(nota7,0))/2;
suspend;
end
end
Osmar

Osmar

Curtidas 0

Respostas

Joel Rodrigues

Joel Rodrigues

22/04/2012

Tente usar um CASE para fazer a seguinte verificação:
SE parte decimal > 5 ENTÃO retorna o valor arredondado
SENÃO retorna o próprio valor.

Para encontrar a parte decimal, você pode subtrair do valor, a parte inteira dele. Exemplo: 5,4-5=0,4

Boa sorte.
GOSTEI 0
Osmar

Osmar

22/04/2012

Joel,
Por favor, como faço para pegar a parte inteira, daria para você fazer o código?

Osmar.
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

22/04/2012

TENTE fazer um CAST para inteiro, não sei de funciona, mas vale a pena tentar.
Tipo CAST(Campo AS INT).

Faz MUITO tempo que não uso Firebird, nem tenho instalado aqui, então não vou nem poder te dizer uns códigos exatos.

Boa sorte.
GOSTEI 0
POSTAR