Divisão de numeros

4 respostas
F

Bom dia galera andei pesquisando no forúm mas não encontrei nada que soluciona-se meu problema. Segue abaixo o meu código :

Quando o meu TextBox perde o foco ele executa isto :

String v = txtValorProduto.getText().trim().replace(",","."); String p = txtPeso.getText().trim().replace(",", "."); DecimalFormat dff = (DecimalFormat) DecimalFormat.getInstance(); //dff.setParseBigDecimal(true); Number valor = null; Number peso = null; try { valor = dff.parse(v); peso = dff.parse(p); double d = valor.doubleValue(); double e = peso.doubleValue(); Double rs = ctl.calcularValorPeso(d,e); txtValorPeso.setText(String.valueOf(rs)); } catch (ParseException ex) { Logger.getLogger(JFControleOperacao.class.getName()).log(Level.SEVERE, null, ex); }

Depois ele chama este metodo :

public double calcularValorPeso(Double valor_produto,Double peso){
        
        Double calculo = valor_produto/peso;
        Double rs = Util.arredondarDouble(calculo,2,0);
        
        return rs;
    }

E depois ele chama este outro metodo para arredondamento de casas decimais…

public static double arredondarDouble(double valor, int casas, int ceilOrFloor) {
     double arredondado = valor;
     arredondado *= (Math.pow(10, casas));
     if (ceilOrFloor == 0) {
         arredondado = Math.ceil(arredondado);
     } else {
         arredondado = Math.floor(arredondado);
     }
     arredondado /= (Math.pow(10, casas));
     valor= Double.parseDouble(String.valueOf(arredondado));
     
     return valor;
 }

Estou com o seguinte problema preciso pegar o valor que o usuario digitou em dois campos são eles : valor_produto e peso, eu tenho que fazer uma divisão com este dois valores só que como é peso e valor pode dar numero como por exemplo valor do produto : 8.444,85 / peso : 3,468. Só que estou com problemas com isso e não está dando certo, alguem já possui algo parecido que faz a mesma coisa de divisão igual o que eu querendo?

Obrigado

4 Respostas

Rodrigo_Sasaki

Tá, só faltou falar o que você quer que aconteça, e o que acontece agora que não condiz com o que você quer.

E até exemplos de input

regis_hideki

Já deu uma olhada na classe BigDecimal? Nela, é possível arredondar/truncar números pra uma determinada quantidade de casas decimais.

F

Então brow, é que na empresa onde eu trabalho existe algumas planilhas que estão sendo transferidas para esta pequena aplicação…

Existe 3 campos que eu preciso fazer alguns calculos sendo esses campos : valor_produto, percentual_frete e peso, utilizei algumas formas que encontrei aqui no forum, so que como o valor do produto pode dar N casas decimas, o peso também e o percentual também utilizei uma formula que encontrei aqui no forum, segue abaixo :

String val_produto = txtValorProduto.getText().trim();
        String val_frete = txtPercentualFrete.getText().trim();
        NumberFormat nf = NumberFormat.getNumberInstance(new Locale("pt_BR"));
        DecimalFormat Formata = new DecimalFormat("##,###.00");
        try {
            Double valor_produto = (Double) Formata.parseObject(val_produto);
            
            Double valor_peso = (Double) Formata.parseObject(val_frete);
            Double rs = ctl.calcularValorPeso(valor_produto, valor_peso);
            DecimalFormat Forma = new DecimalFormat("##,###.00");  
            String vlr_fret = Forma.format(rs);
            txtValorFrete.setText(String.valueOf(vlr_fret));
        } catch(Exception e){
            e.printStackTrace();
        }

Só que quando tento jogar um valor inteiro como se o peso fosse igual a 1, 230, 400, que não tem a virgula ele trava no seguinte erro :

java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Double
	at apontamento.JFControleOperacao.txtPercentualFreteFocusLost(JFControleOperacao.java:1014)
	at apontamento.JFControleOperacao.access$1600(JFControleOperacao.java:23)
	at apontamento.JFControleOperacao$17.focusLost(JFControleOperacao.java:467)
	at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:230)
	at java.awt.Component.processFocusEvent(Component.java:6397)
	at java.awt.Component.processEvent(Component.java:6261)
	at java.awt.Container.processEvent(Container.java:2229)
	at java.awt.Component.dispatchEventImpl(Component.java:4861)
	at java.awt.Container.dispatchEventImpl(Container.java:2287)
	at java.awt.Component.dispatchEvent(Component.java:4687)
	at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1895)
	at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:947)
	at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:621)
	at java.awt.Component.dispatchEventImpl(Component.java:4731)
	at java.awt.Container.dispatchEventImpl(Container.java:2287)
	at java.awt.Component.dispatchEvent(Component.java:4687)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:729)
	at java.awt.EventQueue.access$200(EventQueue.java:103)
	at java.awt.EventQueue$3.run(EventQueue.java:688)
	at java.awt.EventQueue$3.run(EventQueue.java:686)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
	at java.awt.EventQueue$4.run(EventQueue.java:702)
	at java.awt.EventQueue$4.run(EventQueue.java:700)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:699)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)

Vocês nunca precisaram fazer algo parecido igual ao que estou precisando?

Rodrigo_Sasaki

Você pode usar o BigDecimal como foi comentado, ou parsear direto para Double. Você não pode fazer o casting de um Long para um Double

String valor = "1234"; BigDecimal bigDecimal = new BigDecimal(valor); Double valorDouble = Double.valueOf(valor);

Criado 29 de outubro de 2013
Ultima resposta 29 de out. de 2013
Respostas 4
Participantes 3