Double ou Float?

5 respostas
ronnypeterson

é o seguinte: estou trabalhando com uma venda, em que preciso multiplicar a
qtd de créditos pelo valor do crédito (R$ 1,80 * 10), e o resultado dessa multiplicação deve aparecer em um JTextField.

Estou declarando esse valor do crédito como double, mas está ocorrendo um problema, todo vez que tento multiplicar esse valor por 3 ou 9 créditos aparece um resultado imenso no meu JTextField tipo 3.5999999999999996.

Existe alguma forma de eu corrigir isso?

Desde já agradeço a atenção e colaboração de todos

5 Respostas

ziegfried

pesquise sobre java.text.NumberFormat

K

coloca seu código para gente ver

ronnypeterson

Segue o código:

package controle;

import componentesPadrao.JOptionPadrao;

import telas.frameVenda;

public class controlFrameVenda extends frameVenda 
{
	private int saldoDesjejum = 10;
	private int saldoAlmoco = 12;
	private double valorDesjejum = 1.20;
	private double valorAlmoco = 2.30;
	private double valorTotDesjejum = 0;
	private double valorTotAlmoco = 0;
	private double valorTotCompra = 0;
	private double troco = 0; 
	private double valorPago = 0; 
	
	public controlFrameVenda()
	{
		super();
		sairEditDesjejum();
		sairEditAlmoco();	
		carregarValoresTela();
		sairEditValPago();
	}
	
	public void abrirTela()
	{
		
	}
	
	public void clicarCreditar()
	{
		
	}
	
	public void sairEditDesjejum()
	{
		edtQtdPedDes.addFocusListener(new java.awt.event.FocusAdapter() 
		{
			public void focusLost(java.awt.event.FocusEvent e) 
			{
				try
				{
					int creditos = Integer.parseInt(edtQtdPedDes.getText());
					
					valorTotDesjejum = calcularValor(valorDesjejum, creditos);
					
					edtTotDes.setText(String.valueOf(valorTotDesjejum));
					
					alteraValorTotal();
				} 
				catch (Exception f)
				{
					JOptionPadrao.showMessageDialog(frameEquipamento,"Quatidade inválida.\nQuantidade deve ser um número inteiro!", "Informação", 1);
				}
			}
		});	
	}
	
	public void sairEditAlmoco()
	{
		edtQtdPedAlmo.addFocusListener(new java.awt.event.FocusAdapter() 
		{
			public void focusLost(java.awt.event.FocusEvent e) 
			{
				try
				{					 
					int creditos = Integer.parseInt(edtQtdPedAlmo.getText());
					
					valorTotAlmoco = calcularValor(valorAlmoco, creditos);				
					
					edtTotAlmo.setText(String.valueOf(valorTotAlmoco).replace('.', ','));
					
					alteraValorTotal();
				} 
				catch (Exception f)
				{
					JOptionPadrao.showMessageDialog(frameEquipamento,"Quatidade inválida.\nQuantidade deve ser um número inteiro!", "Informação", 1);
				}
			}
		});		
	}
	
	public void sairEditValPago()
	{
		edtValorPago.addFocusListener(new java.awt.event.FocusAdapter() 
		{
			public void focusLost(java.awt.event.FocusEvent e) 
			{
				try
				{			
					valorPago = Double.parseDouble(edtValorPago.getText().replace(',', '.'));
					
					if (valorPago >= valorTotCompra)
					{
						troco = calcularTroco(valorTotCompra, valorPago);
						
						edtTroco.setText(String.valueOf(troco).replace('.', ','));
					}
					else
					{
						JOptionPadrao.showMessageDialog(frameEquipamento,"Valor pago não é suficiente!", "Informação", 1);
					}		
					
				} 
				catch (Exception f)
				{
					JOptionPadrao.showMessageDialog(frameEquipamento,"Valor pago inválido.\nValor pago deve ser um número real!", "Informação", 1);
				}
			}
		});		
	}
	
	public void carregarValoresTela()
	{
		edtSaldoDes.setText(String.valueOf(saldoDesjejum).replace('.', ','));
		edtSaldoAlmo.setText(String.valueOf(saldoAlmoco).replace('.', ','));
		edtPrecoDes.setText(String.valueOf(valorDesjejum).replace('.', ','));
		edtPrecoAlmo.setText(String.valueOf(valorAlmoco).replace('.', ','));
		
	}
				
	public double calcularValor(double valor, int creditos)
	{
		double valor_total = 0;
		
		valor_total = valor * creditos;
		
		System.out.print(valor_total);
		
		return valor_total;		
	}
	
	public void alteraValorTotal()
	{
		valorTotCompra = calcularValorTotal();
		
		edtValTotCompra.setText(String.valueOf(valorTotCompra).replace('.', ','));
	}
	
	public double calcularValorTotal()
	{
		double valor_total = valorTotDesjejum + valorTotAlmoco;
		
		int decimais = 2;	
		
		System.out.println(utils.Number.round(valor_total, decimais));
		
		return valor_total;		
	}

	public double calcularTroco(double valorTotal, double valorPago)
	{
		double troco = valorPago - valorTotal;
		
		return troco;		
	}	
}
nbluis

Isso é normal, esta é a representação do double,

Faça

double d = 1;
System.out.println(d);

e terás uma viagem do gênero.

Deve buscar sobre formatação como o amigo ai encima falou.

Até…

ronnypeterson

Muito obrigado a todos, coloquei uma formatação e resolveu.

Criado 7 de maio de 2007
Ultima resposta 7 de mai. de 2007
Respostas 5
Participantes 4