Fórum Como arredondar apenas para cima? #415715

22/04/2012

0

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

Responder

Posts

22/04/2012

Joel Rodrigues

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.
Responder

Gostei + 0

23/04/2012

Osmar

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

Osmar.
Responder

Gostei + 0

23/04/2012

Joel Rodrigues

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.
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar