Esse é um problema dos floats. Eles foram feitos para ter precisão científica, não monetária. Se os valores que você precisa devem ser precisos, o melhor é realmente usar um long.
Você pode ver essa dica no capítulo 7, item 31, do Effective Java, do Joshua Bloch.
silva.fernandes, valeu a ajuda era isso mesmo, mas não funcionou mesmo assim. Pq quando vou fazer:
BigDecimal a = new BigDecimal("999999.99");
DecimalFormat format = new DecimalFormat("###,###.##");
processo.setValorPedido(Float.parseFloat(format.format(a)));
O valor arredonda de novo.
Já tentei usando:
a.floatValue();
Mas tb arredondou…
Pelo visto vou ter que usar Double mesmo…
Valeu ai ViniGodoy pela ajuda tb…
[quote=leofernandesmo]silva.fernandes, valeu a ajuda era isso mesmo, mas não funcionou mesmo assim. Pq quando vou fazer:
BigDecimal a = new BigDecimal("999999.99");
DecimalFormat format = new DecimalFormat("###,###.##");
processo.setValorPedido(Float.parseFloat(format.format(a)));
O valor arredonda de novo.
Já tentei usando:
a.floatValue();
Mas tb arredondou…
Pelo visto vou ter que usar Double mesmo…
Valeu ai ViniGodoy pela ajuda tb…
[/quote]
Para aprender eu copiei o código e fiz alguns testes. Engraçado que funcionou o arredondamento
String resultado = "99999.99";
DecimalFormat myformat = new DecimalFormat("#,###.00");
float valor = Float.parseFloat(resultado);
String valor_novo = myformat.format(valor);
JOptionPane.showMessageDialog(null, valor_novo);
Se puder, nunca use Float ou float, apenas double ou Double.
A precisão do float é muito pequena - 6 casas apenas - e você está tentando usar com 8 casas.