Fórum problemas para gerar parcelas #388404

13/10/2010

0

boa tarde pessoal...
to com problema como faco para gerar parcelas em java e arrendar o valor?
Adriano Carvalho

Adriano Carvalho

Responder

Posts

19/10/2010

Dyego Carmo

Math.round();
Math.flow();
Math.floor();

Responder

Gostei + 0

19/10/2010

Adriano Carvalho

olha com muita luta consegui chegar a esse codigo, bem simples mais funciona q e uma beleza .
  protected String getDate(int value) {
        String date;

        Date minhaData = tf_vencto.getDate();
        Calendar calendar = tf_vencto.getCalendar();
        calendar.setTime( minhaData);

        // incrementa minha data mais um mes
        calendar.add(Calendar.MONTH, value);
        // imprime a data incrementada

        // formato minha data para aparecer apenas dia, mes e ano
        SimpleDateFormat dataFormatada = new SimpleDateFormat("yyyy-MM-dd");
        // imprime data formatada
        date = (dataFormatada.format(calendar.getTime()));
       
        return date;
    }


agora o problema e como aredondar os valores...
Responder

Gostei + 0

19/10/2010

Davi Costa

Se possível posta o código que vc precisa arredondar os valores.
De ante mão pesquisa por BigDecimal e se possível vê a documentação.

Att Davi
Responder

Gostei + 0

19/10/2010

Adriano Carvalho

  if(!tf_nparc.getText().trim().equals("")){
            Double vlr = Double.parseDouble(tf_vlr.getText().trim().replace(',', '.'));
            Integer parc = Integer.parseInt(tf_nparc.getText().trim());
            Double result = vlr / parc;
            tf_vlr_parc.setText(String.valueOf(result).replace('.', ','));
            funtxt.formtatNumeric2(tf_vlr_parc);
        }

NA REALIDADE ESTOU SO DIVIDINHO O VALOR PELO NUMERO DE PARCELAS O PROBLEMA E Q TENHO Q AREDONDAR PARA NAUM FALTAR NADA NO FINAL DAS CONTAS PQ DO JEITO Q ESTOU FAZENDO PODE FALTAR ALGUNS CENTAVOS QND O CLIENTE TERMINAR DE PAGAR. FWL...
Responder

Gostei + 0

19/10/2010

Davi Costa

Adriano testa usando esse método:

       public double roundToDecimals(double d, int c) {
          int temp=(int)((d*Math.pow(10,c)));
          return (((double)temp)/Math.pow(10,c));
      }

Att Davi
Responder

Gostei + 0

19/10/2010

Adriano Carvalho

deu certo naum, coloquei uma venda de 100 reais em 10x deu uma parcela de 0,21...
Responder

Gostei + 0

19/10/2010

Davi Costa

Esse método que te passei simplesmente só arredonda o double só isso,
o primeiro parâmetro é o Double (por exemplo 111111.111111)  e o segundo parâmtro é a quantidade de casas decimais que vc quer no seu caso 2.

Testa agora com essas novas informações.

Att Davi
Responder

Gostei + 0

19/10/2010

Davi Costa

Só complementando,
vc vai ter que adaptar ao seu método que calcula as parcelas e
como boa prática se for preciso arredondar valores double várias vezes na aplicação cria uma classe utilitária
c esse método e todo mundo que precisar chama ele. Podendo até ser um método static para diminuir o acoplamento. Por exemplo:

TuaUtilitaria.metodoQueArredonda(double, 2);

Att Davi
Responder

Gostei + 0

19/10/2010

Adriano Carvalho

ok... com os teste 
Responder

Gostei + 0

19/10/2010

Adriano Carvalho

com os teste q fiz aqui deu os mesmo valores q os metodos q eu estava usando vou continuar testando veleu...
Responder

Gostei + 0

20/10/2010

Adriano Carvalho

num de certo... tem vez q ele arredonda p menos..
teste assim:

total = 4,50
parcelas = 2

e ele me retornou  2 X 2,20..
e era p ser 2 de 2,25...
Responder

Gostei + 0

20/10/2010

Davi Costa

Cara o método que te apssei só arredonda o valor para as duas casas decimais e testei aqui e deu tudo certo:


/**
     * @param args
     */
    public static void main(String[] args) {
        BigDecimal test = new BigDecimal("4.50");
        double d = test.doubleValue()/2;
        System.out.println(roundToDecimals(d,2));

    }

     public static double roundToDecimals(double d, int c) {
         int temp=(int)((d*Math.pow(10,c)));
         return (((double)temp)/Math.pow(10,c));
     }


Retornou 2.25

Att Davi
Responder

Gostei + 0

20/10/2010

Davi Costa

Adapatei seu método para testar:

    public static void main(String[] args) {
            Double vlr = Double.parseDouble("4,50".trim().replace(',', '.'));
            Integer parc = Integer.parseInt("2".trim());
            Double result = vlr / parc;
            String valorParcela = String.valueOf(result).replace('.', ',');
            System.out.println(roundToDecimals(result,2));

    }

    public static double roundToDecimals(double d, int c) {
        int temp=(int)((d*Math.pow(10,c)));
        return (((double)temp)/Math.pow(10,c));
    }

Você vai ter que deixar seu método mais ou menos assim:


        if(!tf_nparc.getText().trim().equals("")){
            Double vlr = Double.parseDouble(tf_vlr.getText().trim().replace(',', '.'));
            Integer parc = Integer.parseInt(tf_nparc.getText().trim());
            Double result = roundToDecimals(vlr / parc, 2);;
            tf_vlr_parc.setText(String.valueOf(result).replace('.', ','));
           
        }

                public static double roundToDecimals(double d, int c) {
                        int temp=(int)((d*Math.pow(10,c)));
                        return (((double)temp)/Math.pow(10,c));
                }

Espero ter ajudado
Att Davi
Responder

Gostei + 0

20/10/2010

Adriano Carvalho

aff.... deu certo.... valeu...
Responder

Gostei + 0

20/10/2010

Davi Costa

Hehe.
Tranquilo cara!
Abraço
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar