Como tratar valores monetarios em java [Resolvido]

Ola, preciso muto saber como lidar com dinheiro em uma aplicaçao java, pra fazer os calculos eu uso o BigDecimal oque me mata é que eu nao sei como lidar com os centavos ex.: vou solicitar o salario de uma pessoa ai ela inseri no campo: 880.00, ate ai blz o problema é quando passa de mil, tipo 1.520,90 ou 12.759,35. Como eu faço pra obter esses valores e por o ponto e vírgula nos lugares corretos e calcular? no BigDecimal eu tentei passar 12.550,00+12.550,00 e deu erro, eu tenho que remover a virgula e calcular os centavos separados ? aos que se disporem a ajudar, por favor, usem exemplos claros, linguagem simples e de preferencia com codigo. bgd.

Usa float fera.

funcionou mesmo fiz o calculo com float com reais e centavos e a saida foi essa:

 public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        while (1 > 0) {
            System.out.println("insira um valor ");
            float valor = input.nextFloat();
            System.out.println("insira outro valor ");
            float valor1 = input.nextFloat();
            BigDecimal bg = new BigDecimal(valor+"").add(new BigDecimal(valor1+""));
            System.out.println("resultado: "+bg);
         }

insira um valor
10.000,50
insira outro valor
10.000,50
resultado: 20001.0

mais pelo que eu vi para valores monetarios é melhor somar com BigDecimal porem o recomendado para esse caso é passa uma String com o valor pode me dizer se esta correto o meu codigo? e tambem como faço pra por o ponto de volta no lugar, tipo se tem algum padrao EX.: 999.999,99 nesse caso sao 8 digitos na casa do milhar entao enquanto for 8 digitos o ponto vai entre o 3 e 4 digito e a virgula entre a 6 e a 7, e por ai vai com 999,99 e 99,99 e etc… estou correto ? vlw a força

1 curtida
public static void main (String[] args) {
    String valor1 = "12.550,00";
    String valor2 = "12.550,00";
    
    BigDecimal v1 = new BigDecimal(valor1.replaceAll("\\.", "").replace(",",".")); 
    BigDecimal v2 = new BigDecimal(valor2.replaceAll("\\.", "").replace(",",".")); 
    v1 = v2.add(v1);            
    
    DecimalFormat df = new DecimalFormat("###,##0.00");
    System.out.println(df.format(v1));
}
1 curtida

@Vonquelbe_Cruz disse tudo. kk

ola Vonquelbe_Cruz vlw msm mano seu codigo é perfieto! pode explicar o funcionamento? obg.

Então cara … replaceAll converte todos os “.” em “”, então fica assim: “12550,00”

e depois mudo a virgula “,”, pra ponto “.” ficando assim: “12550.00”, desta forma não da erro no BigDecimal.

E pra exibir no formato correto, uso o DecimalFormat que é uma mascara onde “###.##” é a quantidade de digitos que quero exibir. OBS: Cuidado com valores muito grandes.

O “0.00” força as duas casas decimais.

Espero ter ajudado

1 curtida

Ajudou de mais. muito obrigado.