Função ASP para arredondar por alto números reais

Uma função em ASP para arredondar números reais, com decimais, porém sempre fazendo o arredondamento para cima.

Por Luis Javier Alvarez


Publicado em: 08/9/09
Valorize este artigo:
Necessitava esta função para calcular um imposto em uma aplicação de faturamento. Como este imposto sempre se arredonda para cima, não me valia a função round() que vem no Visual Basic Script de ASP. Bom, me valia, porém tinha que fazer logo uns ajustes para me assegurar que o arredondamento o fazia por alto.

Como estou trabalhando com Euros, tenho que utilizar sempre dois decimais, embora tenha criado parâmetros nos decimais que queremos arredondar para que esta função de arredondamento por alto sempre funcione para o que se chamam em matemáticas números reais, sejam quais forem os números em vírgula flutuante (decimais) que tivermos.

Assim, esta função tem dois parâmetros sempre. O primeiro é o número a arredondar e o segundo o número de decimais que queremos. Por exemplo, vou colocar agora vários valores a arredondar por cima para que se entenda o que estou dizendo:

Valor 3 (decimais 0) - Resultado: 3
Valor 3,5 (decimais 0) - Resultado: 4
Valor 3,59 (decimais 1) - Resultado: 3,6
Valor 3,55045 (decimais: 2) - Resultado: 3,56

O código da função é o seguinte. Vem comentado para se entender melhor.

'funcao que arredonda para cima
function arredondar_cima(valor,decimais)
   'response.write "<p>Valor: " & valor
   'response.write "<br>decimais: " & decimais
   if (decimais = 0) then
      'nao se desejam decimais, posso devolver a parte inteira
      'porem se o número tem decimais, tenho que arredondar por cima
      if (int(valor)-valor < 0) then
      'havia decimais no valor, devolvo o valor inteiro + 1
      arredondar_cima = int(valor) + 1
   else
      'no havia decimais
      aredondar_cina = valor
   end if
   else
      'foi dado um valor de decimais e há que arredondar com esses decimais
      arredondamento = round(valor, decimais)
      
      'se o arredondamento é por baixo ou faço por cima
      if (valor - arredondamento) > 0 then
         arredondamento = arredondamento + (1/(calcula_base_expoente(10,decimais)))
         arredondamento = round (arredondamento,decimais)
      end if
         arredondamento _cima=arredondamento
      end if
end function


A função parece longa, porque tem muito comentário e algum response.write para mostrar o estado das variáveis. Porém, na verdade é simples.

Tem duas partes, uma para o arredondamento de números sem decimais e outra para o arredondamento quando se desejam decimais. Quando não se querem usar decimais simplesmente devolvo a parte inteira e vejo se o número original tina decimais, porque então há que arredondar para cima, somando 1 à parte inteira.

Quando se pede arredondamento com um número de decimais maior que zero, se utiliza a função round() que vem de saída com ASP e Visual Basic Script.

Referência: temos uma explicação sobre a função round() e a função int() que utilizamos no código anterior no artigo Arredondar decimais em ASP

Logo faço um cálculo para saber se o valor arredondado foi feito por baixo, porque então tem que ser por cima. Para isso faço uma operação de somar ao número arredondado um valor decimal. Se nos pediram arredondamento de 1 decimal, lhe somo um décimo, se nos pediram número com dois decimais, lhe somo um centésimo, se foram 3 decimais os solicitados, somo um milésimo e assim.

Espero que se entenda e sirva de algo para os leitores.





Comentários do artigo
Foram enviados 2 comentários ao artigo
2 comentários revisados:
Função ASP para arredondar por alto números reais
Por: fagon
09/10/09
Não sou programador, mas a fórmula:
If (Valor*10^(QDecimais)-INT(Valor*(10^QDecimais))<>0;INT(Valor*(10^(QDecimais)))+1;INT(Valor*(10^(QDecimais))))/10^(QDecimais)

não serviria?

Grato.
Função ASP para arredondar por alto números reais
Por: fagon
09/10/09
Sem querer, enviei o post anterior sem desdobrar a respectiva função.
Explicitando-a melhor, ficaria:

'funcao que arredonda para cima
function arredondar_cima(valor,decimais)
'response.write "<p>Valor: " & valor
'response.write "<br>decimais: " & decimais

'testar se ainda há decimais significativos (<>0)
'após a quantidade de decimais com que se pretende arredondar:
if(Valor*10^(Decimais)-INT(Valor*(10^Decimais))<>0 then
INT(Valor*(10^(Decimais)))+1
else
INT(Valor*(10^(Decimais))))/10^(Decimais)
end function

Usuários :    login / registro

Manuais relacionados
Categorias relacionadas
O autor

Home | Sobre nós | Copyright | Anuncie | Entrar em contato