none
Como controlar o arredondamento de decimal para int?

    Pergunta

  • Amigos, preciso fazer um arredondamento de um decimal para int.

     

    Estou usando o Convert.ToInt32(expressao) que arredonda corretamente os seguintes casos:

     

    1,37 para 1

    7,83 para 8

     

    Mas o problema está quando arredonda o que está no meio

    4,5 para 5

     

    A minha regra de negócio necessita que quando seja meio, arredonde para baixo, e não para cima.

    Tem como controlar isso?

    4,5 para 4?

    quarta-feira, 27 de outubro de 2010 16:27

Respostas

  • Oi daniel!

    essa parada aih eh suce

    tem um cara aki nesse post que quis fazer a mesma coisa, porem para CIMA

    use a implementação parecida com a dele mas implemente uma função para BAIXO

    sacou

    issae

    http://social.msdn.microsoft.com/Forums/pt-BR/vscsharppt/thread/3ce0b985-072c-474e-add2-62f372b11c70

    • Marcado como Resposta Daniel Ianegitz quarta-feira, 27 de outubro de 2010 17:54
    quarta-feira, 27 de outubro de 2010 17:00
  •  

    Valeu cara, usei a dica deste cara:

     

     

    apenas adaptei para linguagem C#

    Pra quem precisar de alguma regra de arredondamento no banco de dados (MS SQL), segue a dica:

     

    Você precisa que a @a sempre arredonde para cima... no caso, se for 1,2, arredondar para 2... certo? Esta regra matemática resolve o problema

     

    declare @a decimal(10,2)

     

    select @a = 0.33

     

    select @a = @a + (1 - (@a % 1 ) )

     

    A teoria, muito simples!

     

    @a % 1 - retorna a sobra da divisão de @a por 1. No caso, quando o número contém decimais, ele retorna exatamente os decimais, por exemplo:

     

    select 1.34 % 1 - irá retornar 0.34

    select 543.23 % 1 - irá retornar 0.23

     

    Então, subtraímos de 1 o valor desta sobra. No caso do exemplo acima, 1 - 0.23, fica 0.77.

     

    Então, somamos à variável principal, esta diferença!

     

    @a = 543.23

    %a = 0.23

    1 - (@a % 1) = 0.77

    542.23 + 0.77 = 543!!!!

     

    Esta lógica pode ser aplicada a qualquer linguagem, basta conhecer o operador MÓDULO (no sql é o %).

     

     

    Resumindo, no SQL Server, em uma linha apenas, podemos fazer isso!

     

    select @a = @a + (1 - (@a % 1))

     

    Desta forma, ja estará atribuindo à variável que deseja arredondar o valor desejado.

     

     

    Abraços

    • Marcado como Resposta Daniel Ianegitz quarta-feira, 27 de outubro de 2010 17:54
    quarta-feira, 27 de outubro de 2010 17:54

Todas as Respostas

  • tente assim:

    Math.Round( 3.45, 1) // 3.4


    mais exemplos aqui: http://msdn.microsoft.com/pt-br/library/ms131274.aspx

    quarta-feira, 27 de outubro de 2010 16:52
  • Hi,

    Bom, o correto e arrendondar 0,5 para - mesmo...

    e como se fizesse uma divisao dos numeros

    ex: 01234 / 56789

    de 0,5 a 1,4 arredonda para 1
    de 1,5 a 2,4 arredonda para 2 e assim por diante

    assim tem 5 digitos para cada lado...

    mas se voce quer que arredonde 0,5 pra + bast antes de arredondar com convert.toint32 somar 0,1

    isso resultara na seguinte divisao

    ex: 12345 / 67890 

    de 0,6 a 1,5 arredonda para 1
    de 1,6 a 2,5 arredonda para 2 e assim por diante

    Att,


    codeco Adriel Codeco Silva
    Email: adriel.silva@uppercase.com.br
    MSN: adrielcodeco@hotmail.com
    Blog: adrielcodeco.wordpress.com
    Uppercase – www.uppercase.com.br
    quarta-feira, 27 de outubro de 2010 16:57
    Moderador
  • Oi daniel!

    essa parada aih eh suce

    tem um cara aki nesse post que quis fazer a mesma coisa, porem para CIMA

    use a implementação parecida com a dele mas implemente uma função para BAIXO

    sacou

    issae

    http://social.msdn.microsoft.com/Forums/pt-BR/vscsharppt/thread/3ce0b985-072c-474e-add2-62f372b11c70

    • Marcado como Resposta Daniel Ianegitz quarta-feira, 27 de outubro de 2010 17:54
    quarta-feira, 27 de outubro de 2010 17:00
  •  

    Valeu cara, usei a dica deste cara:

     

     

    apenas adaptei para linguagem C#

    Pra quem precisar de alguma regra de arredondamento no banco de dados (MS SQL), segue a dica:

     

    Você precisa que a @a sempre arredonde para cima... no caso, se for 1,2, arredondar para 2... certo? Esta regra matemática resolve o problema

     

    declare @a decimal(10,2)

     

    select @a = 0.33

     

    select @a = @a + (1 - (@a % 1 ) )

     

    A teoria, muito simples!

     

    @a % 1 - retorna a sobra da divisão de @a por 1. No caso, quando o número contém decimais, ele retorna exatamente os decimais, por exemplo:

     

    select 1.34 % 1 - irá retornar 0.34

    select 543.23 % 1 - irá retornar 0.23

     

    Então, subtraímos de 1 o valor desta sobra. No caso do exemplo acima, 1 - 0.23, fica 0.77.

     

    Então, somamos à variável principal, esta diferença!

     

    @a = 543.23

    %a = 0.23

    1 - (@a % 1) = 0.77

    542.23 + 0.77 = 543!!!!

     

    Esta lógica pode ser aplicada a qualquer linguagem, basta conhecer o operador MÓDULO (no sql é o %).

     

     

    Resumindo, no SQL Server, em uma linha apenas, podemos fazer isso!

     

    select @a = @a + (1 - (@a % 1))

     

    Desta forma, ja estará atribuindo à variável que deseja arredondar o valor desejado.

     

     

    Abraços

    • Marcado como Resposta Daniel Ianegitz quarta-feira, 27 de outubro de 2010 17:54
    quarta-feira, 27 de outubro de 2010 17:54
  • então...

     

    o Math.Round( 3.45, 1) que expliquei antes não funcionou?

    quarta-feira, 27 de outubro de 2010 18:02
  • então...

     

    o Math.Round( 3.45, 1) que expliquei antes não funcionou?


    O Math.Round apenas cortou em uma casa cara, nao arredondou pra cima nem pra baixo.

     

    Mas valeu a ajuda mesmo assim!

    quarta-feira, 27 de outubro de 2010 18:12
  • cavaco,o math.round eu tentei aki com akelas regras MidpointRounding e mesmo assim soh consegui fazer arredondar para cima, para arredondar pra baixo soh consegui fazendo um metodo como akele cara

    se voce conseguir arredondar sem o metodo la por favor nos conte porque deve ser mais prático

    quarta-feira, 27 de outubro de 2010 18:17