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 neste caso?

 
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: Seg Jun 12, 2017 6:37 pm    Assunto: Como arrendondar neste caso? Responder com Citação

Pessoal,
Preciso fazer o seguinte arredondamento nas medias de várias notas, Exemplo: Se a nota for 7,68 arredonda para 8,0, se a nota for 7,28 arredonda para 7,5 (observação: o primeiro arredondamento já consegui o problema é que se a nota vem como 7,28 como fazer esse segundo arredondamento?)

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 = '5 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
      media_nao_arredonda = (nota1 + nota2 + nota3 + nota4)/4;
      pega_decimal        = (nota1 + nota2 + nota3 + coalesce(nota4,2))/4 - trunc((nota1 + nota2 + nota3 + coalesce(nota4,0))/4);
      media_sem_decimal   = trunc(nota1 + nota2 + nota3 + coalesce(nota4,0))/4;
      pega_1decimal       = (nota1 + nota2 + nota3 + coalesce(nota4,2))/4 - trunc((nota1 + nota2 + nota3 + coalesce(nota4,0))/4);
    end

    SUSPEND;
  END
END
[quote][/quote]
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: Seg Jun 12, 2017 8:42 pm    Assunto: Responder com Citação

Boa noite,

Você quer arredondar sempre para cima para ficar com final 0 ou 0.5? Se for experimente mais ou menos dessa forma:

Código:
      if ((pega_decimal = 0) or (pega_decimal = 0.5)) then
          media_com_arredonda = media_nao_arredonda
      else
          if (pega_decimal > 0.5) then
              media_com_arredonda = media_nao_arredonda + 1 - pega_decimal
          else
              media_com_arredonda = media_nao_arredonda + 0.5 - pega_decimal;


Espero que ajude


Editado pela última vez por imex em Dom Fev 25, 2024 3:50 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 Jun 12, 2017 10:35 pm    Assunto: Responder com Citação

Boa noite,
Mais uma vez você Imex, na mosca, que Deus te abençoe sempre, veja como ficou:

Código:

  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;
      pega_decimal        = (nota1 + nota2 + nota3 + coalesce(nota4,2))/4 - trunc((nota1 + nota2 + nota3 + coalesce(nota4,0))/4);

    end

   begin
     if ((pega_decimal = 0) or (pega_decimal = 0.5)) then
          media_com_arredonda = media_nao_arredonda;
      else
     if (pega_decimal > 0.5) then
          media_com_arredonda = media_nao_arredonda + 1 - pega_decimal;
      else
          media_com_arredonda = media_nao_arredonda + 0.5 - pega_decimal;
   end
    SUSPEND;
  END
END
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