Multiplicação

11 respostas
R

Boa noite!!

Estou enfrentando um problema com multiplicaçao, o resultado esta me gerando com varias casas após a virgula.
Conforme o código abaixa se eu digitar no tfQuantProd 3 e no tfVlUntProd 4.36 ele me gera um resultado 13.080000000000002 mas gostaria que me apresenta-se somente 13.08. Isto não ocorre sempre, depende dos valores digitados.

Double a = Double.parseDouble(tfQuantProd.getText());
        Double b = Double.parseDouble(tfVlUntProd.getText());
        Double c = (a * b);

Se alguem puder me ajudar agradeço!!!

11 Respostas

WendersonLP

Esse é um exemplo bem simples:

[code]
double c = Double.parseDouble(
String.format( " %.2f ", ( a * b ) ) /* formata a multiplicação para a string */
);

nieri

vc pode utilizar NumberFormat, para formatar o resultado

http://www.guj.com.br/posts/list/133105.java#716563

abrax

G

Você pode também usar os especificadores de formato no método System.out.printf , que foi introduzido no jdk 5.0, mas para usá-lo você deve ter o java 5.0 instalado e ser estiver usando um IDE como o Eclipse por exemplo deve configurá-lo para compilar par java 5.0.O código fica semelhante a um codigo em C.

System.out.printf("O valor é %0.2f",Variavel);
pedromuyala

Veja mais em: http://www.guj.com.br/posts/list/122936.java :idea:

Espero ter ajudado! :wink:

R

Ok, eu fiz o seguinte e deu certo

Double a = Double.parseDouble(tfQuantProd.getText());
        Double b = Double.parseDouble(tfVlUntProd.getText());
        java.text.DecimalFormat formato = new java.text.DecimalFormat("###,###.##");
        String c = formato.format(a*b); 

        Entao o C ficou por exemplo 13,08 o problema é que preciso agora pegar o C e somar com uma outra variavel Double e ele esta me dando erro acredito que por causa da virgula
         
       Como eu transformo o 13,08 em 13.08???
pedromuyala

Corrige a formatação, está errada.

java.text.DecimalFormat formato = new java.text.DecimalFormat("###.###,##");

Espero ter ajudado! :wink:

R

Se eu colocar neste formato ele me emite um erro

Exception in thread AWT-EventQueue-0 java.lang.IllegalArgumentException: Malformed pattern “###.###,##”

at java.text.DecimalFormat.applyPattern(DecimalFormat.java:2592)

at java.text.DecimalFormat.(DecimalFormat.java:417)

at br.sistemacomercial.wiew.Vendas.importaProdV2(Vendas.java:1024)

at br.sistemacomercial.wiew.Vendas.tfVlUntProdKeyPressed(Vendas.java:989)

at br.sistemacomercial.wiew.Vendas.access$2300(Vendas.java:36)

at br.sistemacomercial.wiew.Vendas$21.keyPressed(Vendas.java:597)

at java.awt.Component.processKeyEvent(Component.java:6174)

at javax.swing.JComponent.processKeyEvent(JComponent.java:2799)

at java.awt.Component.processEvent(Component.java:5993)
maquiavelbona

A linguagem Java obedece a IEEE-754, por isso do número de casas decimais que não existiam. Enquanto fazes conta, delimite um fator de erro e só no final transforme isso em String(caso necessário).
Esse formato dá erro por causa do Locale, onde ponto é delimitador de decimais e vírgula é de casa de milhar. Isso é coisa de procurar.

Até!

pedromuyala
import javax.swing.JFrame;
   import javax.swing.JPanel;
   import javax.swing.JTextField;
   import javax.swing.JLabel;
   import java.text.DecimalFormat;

    class Teste {
   
       public static void main(String args[]) {
      
         JFrame janela = new JFrame("Formatar Número");
         JPanel panel = new JPanel();
         janela.add(panel);
         JTextField tfQuantProd = new JTextField("3");
         JTextField tfVlUntProd = new JTextField("4.36");
         panel.add(tfQuantProd);
         panel.add(tfVlUntProd);
      	
         double a = Double.parseDouble(tfQuantProd.getText()); 
         double b = Double.parseDouble(tfVlUntProd.getText());
         DecimalFormat formato = new DecimalFormat("###,###.##"); 
         String c = formato.format(a*b);
         JLabel total = new JLabel(c);
         panel.add(total);
      	
         janela.setVisible(true);
         janela.pack();
         janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      }
   }

Aqui rodou legal! Vê se agora a dúvida se esclarece!
Espero, dessa vez, ter ajudado! :wink:

R

Desculpa amigo é que sou bem novo em java, ate ai eu ja consegui fazer e entender, o problema é que o C agora ficou com valor de 13,08 e se eu somar com um double ele da erro, acredito que por causa da virgula. Eu não sei o porque que eu coloco o formato como ###,###.## mas ele coloca 13,08 não teria que ser 13.08?

pedromuyala

Opa desculpa amigo, agora entendi realmente o problema! :oops:

import javax.swing.JFrame;
   import javax.swing.JPanel;
   import javax.swing.JTextField;
   import javax.swing.JLabel;
   import java.text.DecimalFormat;
	import java.awt.FlowLayout;

    class Teste {
   
       public static void main(String args[]) {
      
         JFrame janela = new JFrame("Formatar Número");
         JPanel panel = new JPanel(new FlowLayout());
         janela.add(panel);
         JTextField tfQuantProd = new JTextField("3");
         JTextField tfVlUntProd = new JTextField("4.36");
         panel.add(tfQuantProd);
         panel.add(tfVlUntProd);

         DecimalFormat decimalFormat = new DecimalFormat(".00"); // 00 para manter sempre dois digitos!
      	
         double a = Double.parseDouble(tfQuantProd.getText()); 
         double b = Double.parseDouble(tfVlUntProd.getText());
         String c = decimalFormat.format((a*b)).replace(',', '.');
         JLabel total = new JLabel(c);
         panel.add(total);

         double d = Double.parseDouble(c);
         double e = 1.00;
         String f = decimalFormat.format((d+e)).replace(',', '.');;
         JLabel total1 = new JLabel("+ 1.00 é = "+f);
         panel.add(total1);

         janela.setVisible(true);
         janela.pack();
         janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      }
   }

Lembre-se que DecimalFormat vai arredondar os valores! Arrisque informar o valor unitário do produto 4.367 e a double d com 1.0099!

Espero agora sim ter ajudado! :smiley:

Criado 24 de julho de 2009
Ultima resposta 25 de jul. de 2009
Respostas 11
Participantes 6