Problema com calculo

12 respostas
M

Pessoal to tendo um pequeno probleminha em calcular numeros do meu banco que tem centavos, quando ele ta inteiro ex: 50.00 ele faz o calculo normal mas quando ele vem assim ex: 50.50 ele ta bugando o q tenho que fazer para efetuar calculo com centavos veja meu codigo

int qtde = Integer.parseInt(jt_qtde.getText());
        String vlrU = jt_valorU.getText();
        String valor = vlrU.replace(".0", "");
        int valortotal = Integer.parseInt(valor);
        int vlrT = (qtde * valortotal);
        jt_valorT.setText(String.valueOf(vlrT + ".00"));

obrigado pela atencao!

12 Respostas

E

Use double. Por que é que está fazendo tudo com int?

Giulliano

Use BigDecimal para efetuar cálculos com dinheiro :wink:

M

Certo coloquei em Double e deu certo mas se faco uma operacao 25x2.05 q no caso seria = 30.75 ele retorna 30.749999999999996, como retiro esses numeros quebrados?
mais uma vez obrigado pela atencao!

int qtde = Integer.parseInt(jt_qtde.getText());
        Double vlrU = Double.parseDouble(jt_valorU.getText());
        Double vlrT = (qtde * vlrU);
        jt_valorT.setText(vlrT.toString());
Giulliano

Man_United:
Certo coloquei em Double e deu certo mas se faco uma operacao 25x2.05 q no caso seria = 30.75 ele retorna 30.749999999999996, como retiro esses numeros quebrados?
mais uma vez obrigado pela atencao!

int qtde = Integer.parseInt(jt_qtde.getText()); Double vlrU = Double.parseDouble(jt_valorU.getText()); Double vlrT = (qtde * vlrU); jt_valorT.setText(vlrT.toString());

[mais uma vez] Que tal usando BigDecimal que te dá a possibilidade de definir o tipo de arredondamento ?

M

entao tentei implementar usando BigDecimal mas n to conseguindo por isso optei por Double poderia me falar o q devo mudar para invez de usar double usar BigDecimal,obrigado!

jMarcel

Trunque o valor antes de transforma-lo em string de novo.
Acredito que a sobrecarga abaixo ajude:

private double truncate (double x)

{

DecimalFormat df = new  DecimalFormat (0.##”);

String d = df.format (x);

System.out.println ("\tformatado: " + d);

d = d.replaceAll (",", .);

Double dbl = new Double (d);

return dbl.doubleValue ();

}

Man_United:
Certo coloquei em Double e deu certo mas se faco uma operacao 25x2.05 q no caso seria = 30.75 ele retorna 30.749999999999996, como retiro esses numeros quebrados?
mais uma vez obrigado pela atencao!

int qtde = Integer.parseInt(jt_qtde.getText()); Double vlrU = Double.parseDouble(jt_valorU.getText()); Double vlrT = (qtde * vlrU); jt_valorT.setText(vlrT.toString());

M

pq se tentar fazer isso

BigDecimal vlrU = jt_valorU.getText();

ele vai me pedir para mim transferior BigDecimal para String como converto?

M

Jmarcel fis do jeito que vc falo mas veja como esta ficando

http://img169.imageshack.us/i/calculos.jpg/

nas 2 primeiras linha o calculo fico correto mas na linha 3,4,5 repare que ele oculta os centavos e isso nao pode acontecer o q faco? vlw brother

Giulliano

ow loko ta complicado ae hein…segue exemplo

String valor1 = "2.5604650";
        String valor2 = "3.50";
        BigDecimal soma =  new BigDecimal(valor1);
        
        BigDecimal resultado = soma.add(new BigDecimal(valor2));
        resultado = resultado.setScale(2,BigDecimal.ROUND_HALF_UP);

        System.out.println(resultado); //Aqui sai 6.06
M

Primeiro muito obrigado Giulliano por sua atencao deu certinhu fis alguns testes aqui funciono perfeito! so falto uma ultima coisinha isso se possivel e claro, testei varios valores mas se o valor1 for 1999.00 e o valor2 for 10.00 e fizermos a multiply ele retorna assim 19990.00 consigo fazer com que ele retorne 19.999.00 ? com o (.) indicando mil ? obrigado por sua forte atencao amigo!

Giulliano

O cálculo esta correto…

19990.00 é igual a 19.999.00

o que vc precisa fazer é usar um NumberFormat

String valor1 = "1999.00";  
        String valor2 = "10.00";  
        BigDecimal soma =  new BigDecimal(valor1);  
          
        BigDecimal resultado = soma.multiply(new BigDecimal(valor2));  
        resultado = resultado.setScale(2,BigDecimal.ROUND_HALF_UP);  
          
        System.out.println(resultado);
        
        NumberFormat numberFormat = NumberFormat.getIntegerInstance();
        numberFormat.setMinimumFractionDigits(2);
        String a = numberFormat.format(resultado.doubleValue());
        System.out.println(a);
M

Maravilha, muitissimamente obrigado! problema resolvido

Criado 10 de setembro de 2009
Ultima resposta 10 de set. de 2009
Respostas 12
Participantes 4