|
ActiveDelphi .: O site do programador Delphi! :.
|
Exibir mensagem anterior :: Exibir próxima mensagem |
Autor |
Mensagem |
Mazo1 Aprendiz
Registrado: Domingo, 3 de Janeiro de 2010 Mensagens: 256 Localização: Alagoas
|
Enviada: Dom Ago 06, 2017 1:06 pm Assunto: Como arrendondar essas duas médias? |
|
|
Amigos preciso arredondar as média "media_com_arredonda" e a "media_com_arredonda_final" sempre pra cima. Exemplos: 6,75 arredonda para 6,8; 6,28 arredonda para 6,3; 6,99 arredonda para 7,0.
Código: |
BEGIN
FOR
select n.disciplina_notas,
d.nome_disciplina,
(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,
(select n8.nota
from notas n8
where n8.disciplina_notas = n.disciplina_notas
and n8.matricula_aluno_notas = n.matricula_aluno_notas
and n8.codigo_turma_notas = n.codigo_turma_notas
and n8.bimestre = '5 RECUPERACAO') nota_8,
(select n9.nota
from notas n9
where n9.disciplina_notas = n.disciplina_notas
and n9.matricula_aluno_notas = n.matricula_aluno_notas
and n9.codigo_turma_notas = n.codigo_turma_notas
and n9.bimestre = '6 RECUPERACAO') nota_9
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.codigo_turma_notas
INTO :DISCIPLINA_NOTAS,
:NOME_DISCIPLINA,
:NOTA1,
:NOTA2,
:NOTA3,
:NOTA4,
:NOTA5,
:NOTA6,
:NOTA7,
:NOTA8,
:NOTA9
DO
BEGIN
begin
if ( nota5 >= nota1 ) then
nota1 = nota5;
else
nota1 = nota1;
if ( nota6 >= nota2 ) then
nota2 = nota6;
else
nota2 = nota2;
if ( nota7 >= nota3 ) then
nota3 = nota7;
else
nota3 = nota3;
if ( nota8 >= nota4 ) then
nota4 = nota8;
else
nota4 = nota4;
media_nao_arredonda = (nota1 + nota2 + nota3 + nota4)/4;
media_com_arredonda = ?
media_com_arredonda_final = (media_com_arredonda * 4) + (nota9 * 3)/7
end
SUSPEND;
END
END
|
|
|
Voltar ao Topo |
|
|
imex Moderador
Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Dom Ago 06, 2017 8:03 pm Assunto: |
|
|
Boa noite,
Qual banco de dados (e versão) você está utilizando? Firebird?
Experimente fazer uns testes dessa forma:
Código: | media_com_arredonda = floor(media_nao_arredonda * 10) / 10;
media_com_arredonda_final = floor(((media_com_arredonda * 4) + (nota9 * 3)) / 7 * 10) / 10; |
Espero que ajude
Editado pela última vez por imex em Ter Out 03, 2023 2:45 pm, num total de 1 vez |
|
Voltar ao Topo |
|
|
Mazo1 Aprendiz
Registrado: Domingo, 3 de Janeiro de 2010 Mensagens: 256 Localização: Alagoas
|
Enviada: Seg Ago 07, 2017 11:58 am Assunto: |
|
|
Bom dia Imex,
Agradeço pela ajuda amigo mas ainda não deu certo. Uso Firebird 2.1, e nas duas médias em todas as disciplinas a casa decimal fica com zero. |
|
Voltar ao Topo |
|
|
strak2012 Colaborador
Registrado: Segunda-Feira, 13 de Janeiro de 2014 Mensagens: 1518 Localização: Maceió - AL
|
Enviada: Seg Ago 07, 2017 1:30 pm Assunto: |
|
|
use a função ROUND(x,y)
Descrição
ROUND(valor a ser arrendondado, números de casas decimal);
exemplo:
ROUND(123.654, 1) retorna 123.700 e não 123.7 - ficara com 1 casa decimal arredondada e as demais zero
ROUND(8341.7, -3) retorna 8000.0 e não 8000 - ficara com 1 casa decimal (note que foi usado -3)
ROUND(45.1212, 0) retorna 45.0000 e não 45 - não ficara com casas decimal arredondada e as demais zero
fonte:
https://firebirdsql.org/refdocs/langrefupd21-intfunc-round.html
na uma analisada ai e ver se te resolve seu problema. _________________ Tudo podemos quando tudo sabemos! |
|
Voltar ao Topo |
|
|
Mazo1 Aprendiz
Registrado: Domingo, 3 de Janeiro de 2010 Mensagens: 256 Localização: Alagoas
|
Enviada: Seg Ago 07, 2017 10:20 pm Assunto: |
|
|
Amigos agradeço a ajuda de todos, funcionou com round como também funcionou retirando apenas o floor da dica do Imex. Que Deus abençoe a todos. |
|
Voltar ao Topo |
|
|
imex Moderador
Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Ter Ago 08, 2017 9:36 am Assunto: |
|
|
Mazo1, se você quer fazer um arredondamento normal é melhor utilizar a função Round.
Eu tinha postado aquela sugestão porque estava achando (pelo visto incorretamente) que você queria arredondar sempre para cima, e mesmo assim a sugestão estava incorreta como você constatou.
Abs |
|
Voltar ao Topo |
|
|
|
|
Enviar Mensagens Novas: Proibido. Responder Tópicos Proibido Editar Mensagens: Proibido. Excluir Mensagens: Proibido. Votar em Enquetes: Proibido.
|
|