Olá eu estou tentando usar o NumberFormat para formatar a saída de um resultado para um cliente eu criei um método para isso que está funcionando parcialmente, ele formata normal mas quando eu preciso fazer a operação inversa para obter o numero double original está dando paupublic double retornaValor(String valor){
double total = 0;
try {
Locale ptBr = new Locale("pt", "BR");
NumberFormat moedaFormat = NumberFormat.getCurrencyInstance(ptBr); //para moedas
double moeda = 0;
moeda = (Double)(moedaFormat.parse(valor));
System.out.println(moeda);
} catch (ParseException ex) {
Logger.getLogger(Validacoes.class.getName()).log(Level.SEVERE, null, ex);
}
return total;
}se eu passo um valor assim: 12,01 ele funciona perfeitamente, mas se e passo 12,00 cai numa exceçãoException in thread "main" java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Double
at Teste.Teste.main(Teste.java:66)
Java Result: 1 não entendi porque ele está intepretando o número como long se eu estou fazendo o casting para double, alguém pode me ajudar por favor
Você já viu o que o parse retorna? 8)
O que acontece é que o código:
deve ser porque o moedaFormat.parse(valor) é inteligente suficiente para saber que 12,00 pode ser convertido em um Long, e nao precisa de um Double. A hora que voce faz cast do Long para o Double da problema
Talvez voce possa usar os metodos do wrapper double:
double exemplo = Double.parseDouble(valor);
Abraço!
ah! Use o format para formatar o Double que voce converteu depois.
Não sei se vai resolver, mas é uma tentativa