problemas para gerar parcelas
boa tarde pessoal...
to com problema como faco para gerar parcelas em java e arrendar o valor?
to com problema como faco para gerar parcelas em java e arrendar o valor?
Adriano Carvalho
Curtidas 0
Respostas
Dyego Carmo
13/10/2010
Math.round();
Math.flow();
Math.floor();
Math.flow();
Math.floor();
GOSTEI 0
Adriano Carvalho
13/10/2010
olha com muita luta consegui chegar a esse codigo, bem simples mais funciona q e uma beleza .
agora o problema e como aredondar os valores...
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...
GOSTEI 0
Davi Costa
13/10/2010
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
De ante mão pesquisa por BigDecimal e se possível vê a documentação.
Att Davi
GOSTEI 0
Adriano Carvalho
13/10/2010
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...
GOSTEI 0
Davi Costa
13/10/2010
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
public double roundToDecimals(double d, int c) {
int temp=(int)((d*Math.pow(10,c)));
return (((double)temp)/Math.pow(10,c));
}
Att Davi
GOSTEI 0
Adriano Carvalho
13/10/2010
deu certo naum, coloquei uma venda de 100 reais em 10x deu uma parcela de 0,21...
GOSTEI 0
Davi Costa
13/10/2010
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
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
GOSTEI 0
Davi Costa
13/10/2010
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
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
GOSTEI 0
Adriano Carvalho
13/10/2010
ok... com os teste
GOSTEI 0
Adriano Carvalho
13/10/2010
com os teste q fiz aqui deu os mesmo valores q os metodos q eu estava usando vou continuar testando veleu...
GOSTEI 0
Adriano Carvalho
13/10/2010
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...
teste assim:
total = 4,50
parcelas = 2
e ele me retornou 2 X 2,20..
e era p ser 2 de 2,25...
GOSTEI 0
Davi Costa
13/10/2010
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
/**
* @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
GOSTEI 0
Davi Costa
13/10/2010
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
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
GOSTEI 0
Adriano Carvalho
13/10/2010
aff.... deu certo.... valeu...
GOSTEI 0
Davi Costa
13/10/2010
Hehe.
Tranquilo cara!
Abraço
Tranquilo cara!
Abraço
GOSTEI 0
Dyego Carmo
13/10/2010
Opa !
Poderia fechar o POST ?
ValeuZ !
Poderia fechar o POST ?
ValeuZ !
GOSTEI 0