Java.lang.NumberFormatException

Caros amigos,

Estou fazendo o seguinte:

Tenho uma TextView que recebe um valor, float. Tenho um EditText que digito a quantidade. Quero fazer Quantidade * Valor e ta dando java.lang.NumberFormatException

Aqui tá o código:

qtde = Integer.valueOf(Quantidade.getText().toString()); // Pego a quantidade
Log.i("Quant","Quantidade: " + qtde); // Mostra no LogCat
 				 
valor = Preco.getText().toString(); // Pego o valor
Log.i("Preço","Preço: " + valor); // Mostra no LogCat
				
total = qtde * Float.parseFloat(valor.trim()); // Quero fazer o cálculo aqui, mas dá erro

Alguém me ajuda?? Declarei as variáveis assim:

private String valor;

private int qtde = 0;
private float vPreco = 0;
private float total = 0;

qual o valor que você envia para o parseFloat? Lembre-se que se for um valor numérico separado por vírgulas, você precisa tratar isso. O padrão do java é separar as casas decimais com o ponto.

Tá com virgula, agora que vi lá. Como arrumo isso?

Outra coisa, evite usar float.
Use sempre double (dá bem menos dor de cabeça com contas erradas), e se for fazer contas com dinheiro e não precisar usar raízes quadradas e outras operações mais complicadas, use BigDecimal.

qual o valor?

é na linha do parseFloat mesmo que é lançada a exceção ?

Que nada, a conta está certa. Provavelmente, nessa variável, tem alguma coisa que você não está esperando (espaços a mais também podem atrapalhar, por exemplo).

Tá trazendo assim: Exemplo: 3,50 no valor.

To querendo fazer a conta Quantidade * Valor.

você pode usar o DecimalFormat
Não sou muito bom com ele, mas acho que assim funciona:DecimalFormatSymbols symbols = new DecimalFormatSymbols(new Locale("pt", "BR")); DecimalFormat decimalFormat = new DecimalFormat("###,##0.00", symbols);EDIT: Aliás, nem precisa do DecimalFormatSymbols, tente só assim: DecimalFormat decimalFormat = new DecimalFormat("###,##0.00");

Eu estou dizendo que é para você melhorar seus óculos. Para Double.parseDouble ou Float.parseDouble funcionar, você precisa escrever “3.50”, não “3,50” (veja a pequena perninha da vírgula : )

Se você precisa trabalhar com vírgulas (afinal de contas, estamos no Brasil) você pode usar alguma outra função do Java que entenda vírgulas, não Double.parseDouble ou Float.parseDouble. Ou então você pode trocar as vírgulas por pontos… mas esse campo de moeda vem também com pontos, como “1.234,56” ?

Vou Testar e ja posto o resultado.

Erro ainda.

“Erro ainda” não é resposta. Diga pelo menos “é o mesmo erro” ou “apareceu outro erro, que é…” e poste o stack trace.

Estou executando para pegar o erro no logCat, um momento. Desculpe.

O mesmo erro:

java.lang.NumberFormatException

To fazendo assim para formatar o valor:

	private static final Locale BRAZIL = new Locale("pt","BR");  
	public static final DecimalFormat DINHEIRO_REAL = new DecimalFormat("###,###,##0.00");

	public static String mascaraDinheiro(double valor, DecimalFormat moeda){     
		return moeda.format(valor);     
	}

Ué, o problema não estava em converter uma String para float?

Então, é, mas ta dando erro ainda. Postei o código que formata o valor.

O código que está dando erro usa esse método de conversão?

esse método retorna uma String não retorna? não acho que o erro esteja aí

Mudei para:

public static final DecimalFormat DINHEIRO_REAL = new DecimalFormat("###,##0.00");

Ainda traz com no tipo 3,50. Tá dando o erro java.lang.NumberFormatException ainda.

mas como ficou o código? você ainda usa parseFloat ?

Dá erro quando executa essa linha:

private int qtde = 0;
private double vPreco = 0;
private double total = 0;


qtde = Integer.valueOf(Quantidade.getText().toString());
Log.i("Quant","Quantidade: " + qtde);
				 
valor = Preco.getText().toString();
Log.i("Preço","Preço: " + valor);

total = qtde * Double.parseDouble(valor.trim());

No logCat tá mostrando os valores.