ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Como arrendondar essas duas médias?

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
Mazo1
Aprendiz
Aprendiz


Registrado: Domingo, 3 de Janeiro de 2010
Mensagens: 256
Localização: Alagoas

MensagemEnviada: Dom Ago 06, 2017 1:06 pm    Assunto: Como arrendondar essas duas médias? Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Dom Ago 06, 2017 8:03 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
Mazo1
Aprendiz
Aprendiz


Registrado: Domingo, 3 de Janeiro de 2010
Mensagens: 256
Localização: Alagoas

MensagemEnviada: Seg Ago 07, 2017 11:58 am    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
strak2012
Colaborador
Colaborador


Registrado: Segunda-Feira, 13 de Janeiro de 2014
Mensagens: 1518
Localização: Maceió - AL

MensagemEnviada: Seg Ago 07, 2017 1:30 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail MSN Messenger
Mazo1
Aprendiz
Aprendiz


Registrado: Domingo, 3 de Janeiro de 2010
Mensagens: 256
Localização: Alagoas

MensagemEnviada: Seg Ago 07, 2017 10:20 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Ter Ago 08, 2017 9:36 am    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB