Fórum Como arredondar apenas para cima? #415715
22/04/2012
0
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
Curtir tópico
+ 0Posts
22/04/2012
Joel Rodrigues
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
23/04/2012
Osmar
Por favor, como faço para pegar a parte inteira, daria para você fazer o código?
Osmar.
Gostei + 0
23/04/2012
Joel Rodrigues
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
Clique aqui para fazer login e interagir na Comunidade :)