Pular para o conteúdo
  • Este tópico contém 3 respostas, 4 vozes e foi atualizado pela última vez 17 anos, 3 meses atrás por santosclay.
Visualizando 4 posts - 1 até 4 (de 4 do total)
  • Autor
    Posts
  • #80505
    fabio_carneiro
    Participante

      Senhores, preciso da ajuda de vocês o que está acontecendo é o seguinte, tenho um valor retornado da querie.

      Exemplo: 134,4
      236,7

      O que desejo fazer é o seguinte valores entre 1 e 5 arredondo para baixo ; entre 6 e 9 arredondo para cima.

      o valor 134,4 seria 134,5 e o 236,7 tornaria a ser 236,0.

      Como posso implementar isto ?

      Trabalhar com as outras casas centésimos, milhares é facil o problema é da dezena.

      Abs

      #80525
      vieri
      Participante

        tente utilizar as funções mod e trunc para auxiar neste processo!
        fiquei tentando resolver seu problema aqui e realmenta com a casa da dezena complica! Me parece que terá que fazer na mão mesmo, não existe uma função especifica pra isso. mas com o round,mod e trunc vc chega lá!
        abraçoss..
        se conseguir, poste o resultado.. vou tentar aqui tb, fikei curioso!!
        8)

        #80536
        Marcio68Almeida
        Participante

          Você pode user o round ()
          Select round (234.6) from dual

          Ou então fazer gambiarra com o trunc ()
          Select trunc (234.1 + .5) from dual

          #80599
          santosclay
          Participante

            Boa tarde a todos.

            Levando em consideração apenas à regra abaixo:

            “O que desejo fazer é o seguinte valores entre 1 e 5 arredondo para baixo ; entre 6 e 9 arredondo para cima.”

            Ou seja:

            O arredondamento do número 10,6 seria 11
            O arredondamento do número 10,4 seria 10

            Consegui gerar o código abaixo:

            SELECT CASE WHEN (MOD(VALOR , TRUNC(VALOR, 0)) BETWEEN 0 AND 0.5) THEN (VALOR – MOD(VALOR , TRUNC(VALOR, 0)))
            ELSE (VALOR + (1 – MOD(VALOR , TRUNC(VALOR, 0))))
            END AS “NEW_VALUE”
            FROM DUAL

            EXEMPLO :

            SELECT CASE WHEN (MOD(10.5 , TRUNC(10.5, 0)) BETWEEN 0 AND 0.5) THEN (10.5 – MOD(10.5 , TRUNC(10.5, 0)))
            ELSE (10.5 + (1 – MOD(10.5 , TRUNC(10.5, 0))))
            END AS “NEW_VALUE”
            FROM DUAL;

            SELECT CASE WHEN (MOD(10.6 , TRUNC(10.6, 0)) BETWEEN 0 AND 0.5) THEN (10.6 – MOD(10.6 , TRUNC(10.6, 0)))
            ELSE (10.6 + (1 – MOD(10.6 , TRUNC(10.6, 0))))
            END AS “NEW_VALUE”
            FROM DUAL;

            Por favor, qualquer bug na lógica é só reportar.

            Abraços Clayton.

          Visualizando 4 posts - 1 até 4 (de 4 do total)
          • Você deve fazer login para responder a este tópico.
          plugins premium WordPress