none
Arredondar para cima RRS feed

  • Pergunta

  • Boa noite, estou fazendo um programa de calculo para a faculdade, e estou com um problema, eu preciso arredondar um numero decimal para o múltiplo de 5 mais próximo para cima, por exemplo

    1,61 para 1,65

    1,66 para 1,7

    Tentei usar o round e o ceiling, mas não é o que eu preciso, pois se arredondar muito, vai dar errado o programa.Desde já agradeço.

    segunda-feira, 5 de novembro de 2018 20:58

Respostas

  • Olá.

    É meio que uma solução não muito bonita.

    mas consegui aqui assim:

                double VL_CORRIG_B = double.Parse("123.61");
    
                double valoraux = Math.Round(VL_CORRIG_B, 1, MidpointRounding.AwayFromZero);
                if (((VL_CORRIG_B.ToString().Split('.').Length > 1) && VL_CORRIG_B.ToString().Split('.')[1].Length > 1) &&
                    int.Parse(VL_CORRIG_B.ToString().Split('.')[1].Substring(1,1)) > 0 &&
                    int.Parse(VL_CORRIG_B.ToString().Split('.')[1].Substring(1, 1)) < 5)
                {
                    valoraux = valoraux + 0.05;
                }
    
                Console.WriteLine("123.61 Valor =>>" + valoraux.ToString());
    
                VL_CORRIG_B = double.Parse("123.66");
    
                valoraux = Math.Round(VL_CORRIG_B, 1, MidpointRounding.AwayFromZero);
                if (((VL_CORRIG_B.ToString().Split('.').Length > 1) && VL_CORRIG_B.ToString().Split('.')[1].Length > 1) &&
                    int.Parse(VL_CORRIG_B.ToString().Split('.')[1].Substring(1, 1)) > 0 &&
                    int.Parse(VL_CORRIG_B.ToString().Split('.')[1].Substring(1, 1)) < 5)
                {
                    valoraux = valoraux + 0.05;
                }
    
                Console.WriteLine("123,66 Valor =>>" + valoraux.ToString());
    
                VL_CORRIG_B = double.Parse("123.00");
    
                valoraux = Math.Round(VL_CORRIG_B, 1, MidpointRounding.AwayFromZero);
                if (((VL_CORRIG_B.ToString().Split('.').Length > 1) && VL_CORRIG_B.ToString().Split('.')[1].Length > 1) &&
                    int.Parse(VL_CORRIG_B.ToString().Split('.')[1].Substring(1, 1)) > 0 &&
                    int.Parse(VL_CORRIG_B.ToString().Split('.')[1].Substring(1, 1)) < 5)
                {
                    valoraux = valoraux + 0.05;
                }
    
                Console.WriteLine("123,00 Valor =>>" + valoraux.ToString());
    
    


    123.61 Valor =>> 123.65
    123,66 Valor =>> 123.7

    espero que te ajude




    • Editado J.G. _ segunda-feira, 5 de novembro de 2018 21:49 correção2
    • Marcado como Resposta Filipe B CastroModerator sexta-feira, 30 de novembro de 2018 20:16
    segunda-feira, 5 de novembro de 2018 21:44
  • Esta função vai fazer o que você precisa

     public decimal ArredondaValor(decimal valor)
            {
                decimal sobra = (valor - decimal.Round(valor, 1));
    
                if (sobra > 0)
                {
                    valor = valor - sobra + Convert.ToDecimal("0,05");
                }
                else
                {
                    valor = decimal.Round(valor, 1);
                }
                return valor;
            }

    Se a resposta contribuiu com seu aprendizado por favor marque como Útil
    Se solucionou seu problema por favor marque como Resposta
    Atenção, se seu problema foi resolvido não deixe o post aberto  

    Visite :  www.codigoexpresso.com.br


    segunda-feira, 5 de novembro de 2018 23:38

Todas as Respostas

  • Olá.

    É meio que uma solução não muito bonita.

    mas consegui aqui assim:

                double VL_CORRIG_B = double.Parse("123.61");
    
                double valoraux = Math.Round(VL_CORRIG_B, 1, MidpointRounding.AwayFromZero);
                if (((VL_CORRIG_B.ToString().Split('.').Length > 1) && VL_CORRIG_B.ToString().Split('.')[1].Length > 1) &&
                    int.Parse(VL_CORRIG_B.ToString().Split('.')[1].Substring(1,1)) > 0 &&
                    int.Parse(VL_CORRIG_B.ToString().Split('.')[1].Substring(1, 1)) < 5)
                {
                    valoraux = valoraux + 0.05;
                }
    
                Console.WriteLine("123.61 Valor =>>" + valoraux.ToString());
    
                VL_CORRIG_B = double.Parse("123.66");
    
                valoraux = Math.Round(VL_CORRIG_B, 1, MidpointRounding.AwayFromZero);
                if (((VL_CORRIG_B.ToString().Split('.').Length > 1) && VL_CORRIG_B.ToString().Split('.')[1].Length > 1) &&
                    int.Parse(VL_CORRIG_B.ToString().Split('.')[1].Substring(1, 1)) > 0 &&
                    int.Parse(VL_CORRIG_B.ToString().Split('.')[1].Substring(1, 1)) < 5)
                {
                    valoraux = valoraux + 0.05;
                }
    
                Console.WriteLine("123,66 Valor =>>" + valoraux.ToString());
    
                VL_CORRIG_B = double.Parse("123.00");
    
                valoraux = Math.Round(VL_CORRIG_B, 1, MidpointRounding.AwayFromZero);
                if (((VL_CORRIG_B.ToString().Split('.').Length > 1) && VL_CORRIG_B.ToString().Split('.')[1].Length > 1) &&
                    int.Parse(VL_CORRIG_B.ToString().Split('.')[1].Substring(1, 1)) > 0 &&
                    int.Parse(VL_CORRIG_B.ToString().Split('.')[1].Substring(1, 1)) < 5)
                {
                    valoraux = valoraux + 0.05;
                }
    
                Console.WriteLine("123,00 Valor =>>" + valoraux.ToString());
    
    


    123.61 Valor =>> 123.65
    123,66 Valor =>> 123.7

    espero que te ajude




    • Editado J.G. _ segunda-feira, 5 de novembro de 2018 21:49 correção2
    • Marcado como Resposta Filipe B CastroModerator sexta-feira, 30 de novembro de 2018 20:16
    segunda-feira, 5 de novembro de 2018 21:44
  • Esta função vai fazer o que você precisa

     public decimal ArredondaValor(decimal valor)
            {
                decimal sobra = (valor - decimal.Round(valor, 1));
    
                if (sobra > 0)
                {
                    valor = valor - sobra + Convert.ToDecimal("0,05");
                }
                else
                {
                    valor = decimal.Round(valor, 1);
                }
                return valor;
            }

    Se a resposta contribuiu com seu aprendizado por favor marque como Útil
    Se solucionou seu problema por favor marque como Resposta
    Atenção, se seu problema foi resolvido não deixe o post aberto  

    Visite :  www.codigoexpresso.com.br


    segunda-feira, 5 de novembro de 2018 23:38