none
Arredondamento

    Pergunta

  • Tenho que fazer o arredondamento usando alguns valores pré-definidos de arredondamento como por exemplo:

    0,05

    0,10

    0,50

    1,00

    5,00

    10,00

    50,00

     

    Exemplo:

    2,97 + 10% = 3,267

    aplicando arred. de 0,05 fica 3,25

    aplicando arred. de 0,10 fica 3,30

    aplicando arred. de 0,50 fica 3,50

    aplicando arred. de 1,00 fica 3,00

    aplicando arred. de 5,00 fica 5,00

    aplicando arred. de 10,00 fica 10,00

    aplicando arred. de 50,00 fica 50,00

     

    Alguem tem uma idéia de como posso fazer, já fiz vários testes usando round() e para alguns valores funciona e outros não.

     

    Grato

    Joelso

     

     

     

    segunda-feira, 30 de janeiro de 2012 17:27

Todas as Respostas

  • Oi,

    A função round arredonda com base no número de casas decimais. Desconheço uma função de arredondamento com a lógica que procura (até porque envolve uma destorção do valor), então criei uma para você, está ai embaixo.

    Create FUNCTION Arredondar 
    (
    	-- Add the parameters for the function here
    	@valor numeric(15,3),@Arredondamento numeric(15,3)
    )
    RETURNS numeric(15,3)
    AS
    BEGIN
    
    declare @decimal numeric(6,3)
    declare @resto numeric(15,3)
    DECLARE @Result numeric(15,3)
    
    select @decimal=@valor  
    select @resto=@decimal%@Arredondamento
    
    if (@resto > @arredondamento/2)
      select @result=@valor + (@arredondamento - @resto)
    else
      select @result=@valor - @resto
    
    RETURN @Result
    
    END
    GO
    
    

     

    Porém para o arredondamento por 10 e 50 o resultado será 0 e não 10 e 50. Isso porque o número 3 está muito mais próximo de 0 do que de 10 e 50, portanto o arredondamento nestes casos fica sendo sempre zero.

    Os demais exemplos que colocou funcionam como esperado.

    Abs,

    Dennes
    ** Evento : Inscreva-se para o SQL Saturday no Rio, é GRATUITO : HTTP://www.sqlsaturday.com/127/eventhome.aspx


    Dennes - Se resolveu, classifique a mensagem, por favor - [http://www.bufaloinfo.com.br] NOVO DVD Segurança no ASP.NET : http://www.bufaloinfo.com.br/LearingSeriesSegurancaASPNET2.asp
    terça-feira, 31 de janeiro de 2012 14:39
  • JoelsonPOARs,

    Além do Round() existem outras funções como Ceiling() e Floor() para arredondamento de Casas Decimais.

    Agora um detalhe é importante, o arredondamento de valores pode variar muito para cada tipo de dados, por padrão o tipo Numeric e Decimal são os que possibilitam um arredondamento mais preciso dos seus dados.


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]
    quarta-feira, 1 de fevereiro de 2012 23:17