Bom dia pessoal, encontrei varios tópicos no fórum de pessoas que precisavam pegar somente duas casas após a vírgula, só que o meu problema é um pouquinho diferente e sobre isto eu não achei nada.
Como faço para pegar uma variavel BigDecimal, que esta recebendo um valor 5000, e transformá-la para 50.00, ou de 4545 para 45.45. e assim por diante?
- Divida o valor por 100
- Use DecimalFormat mesmo. O método format aceita um BigDecimal.
Use a classe DecimalFormat, presente no pacote java.text
Nela, forneça o formato “0.00”, que vai ter as duas casas decimais.
BigDecimal total = new BigDecimal("5000");
BigDecimal cem = new BigDecimal("100");
total = total.divide(cem);
DecimalFormat resultado = new DecimalFormat("0.00");
resultado.format(total);
jLabel1.setText(String.valueOf(total));
o resultado da 50, eu realmente precisava que fosse 50.00, mas com o 4545 ja funciona!!!
# DecimalFormat resultado = new DecimalFormat("0.00");
# resultado.format(total);
# jLabel1.setText(String.valueOf(total));
Amigo, você está viajando. O correto é:
DecimalFormat resultado = new DecimalFormat("0.00");
jLabel1.setText(resultado.format(total));
- format não modifica o BigDecimal que está sendo operado. Ele retorna uma String do jeitinho que você quer.
- Onde é que você arranjou o String.valueOf? No Autocomplete?
É tinha viajado mesmo, a gora deu certo, muito obrigado!!!
Bom dia Pessoal, dentro deste mesmo formulario, surgiu um novo problema, e mais uma vez achei tópicos parecidos, mas não exatemente como o meu problema.
To precisando parcelar os valores e gostaria de arredondá-los,por exemplo se eu tiver uma conta de 55.55 e parcelar em 3 vezes que ele me gerasse uma parcela de 18.51 e duas de 18.52, acho que não estou muito longe de conseguir, mas falta algum detalhe que não estou resolvendo
private void atulizaParcela() {
double ValorTotal = Double.valueOf(jftfValorTotal.getText().replace(".", "").replace(",", "."));
BigDecimal ValorTotal2 = new BigDecimal(ValorTotal);
ValorTotal2 = ValorTotal2.setScale(2, BigDecimal.ROUND_HALF_EVEN);
int QTDE = Integer.valueOf(jtParcelas.getText());
BigDecimal QTDE2 = new BigDecimal(QTDE);
BigDecimal[] var1 = ValorTotal2.divideAndRemainder(QTDE2, MathContext.UNLIMITED);
BigDecimal valorPrimeiraParcela = var1[0].add(var1[1]);
BigDecimal valorDemaisParcelas = var1[0];
valorDemaisParcelas = valorDemaisParcelas.setScale(2, BigDecimal.ROUND_HALF_EVEN);
jftfValorParcelas.setText(String.valueOf(valorDemaisParcelas));
}
Deste Jeito se eu informar o valor 55.55 ele está retornando uma parcela de 19.55 e duas de 18.00, tem como aproximar mais estes valores?
import java.math.BigDecimal;
import java.math.RoundingMode;
class Par<T, U> {
public T primeiro;
public U segundo;
public Par(T t, U u) { primeiro = t; segundo = u; }
public String toString() { return "(" + primeiro + "," + segundo + ")"; }
}
class Parcelas {
/** Parcelar, sendo que a última parcela é menor */
public static Par<BigDecimal, BigDecimal> parcelarUltimaParcelaMenor (BigDecimal valor, long nParcelas) {
BigDecimal parcela;
BigDecimal ultimaParcela;
parcela = valor.divide (BigDecimal.valueOf (nParcelas), 2, RoundingMode.CEILING);
ultimaParcela = valor.subtract (parcela.multiply (BigDecimal.valueOf (nParcelas - 1)));
return new Par<BigDecimal, BigDecimal>(parcela, ultimaParcela);
}
/** Parcelar, sendo que a última parcela é maior */
public static Par<BigDecimal, BigDecimal> parcelarUltimaParcelaMaior (BigDecimal valor, long nParcelas) {
BigDecimal parcela;
BigDecimal ultimaParcela;
parcela = valor.divide (BigDecimal.valueOf (nParcelas), 2, RoundingMode.FLOOR);
ultimaParcela = valor.subtract (parcela.multiply (BigDecimal.valueOf (nParcelas - 1)));
return new Par<BigDecimal, BigDecimal>(parcela, ultimaParcela);
}
public static void main (String[] args) {
System.out.println (parcelarUltimaParcelaMenor (new BigDecimal ("100.00"), 3));
System.out.println (parcelarUltimaParcelaMaior (new BigDecimal ("100.00"), 3));
}
}
Saída:
(33.34,33.32)
(33.33,33.34)