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.
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.
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).
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” ?
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);
}