note The full stack trace of the root cause is available in the Sun-Java-System/Application-Server logs.
Sun-Java-System/Application-Server[/code]
Não entendo o que está ocorrendo! Alguém sabe?
A String está usando como separador de casas decimais a vírgula, e você criou o seu number format esperando ponto. Trocando por vírgula deverá resolver seu problema
e na servlet voce precisa tratar esse número…vc pode usar StringTokenizer e depois o método replace para alterar a virgula pelo "."
Não sei se essa é a melhor opção mas funciona…
Se alguem tiver uma opção mais adequada, por favor me corrijam.
Da uma olhadinha no código de exemplo
//pega os valores ate o ponto final
StringTokenizer token= new StringTokenizer(<<valor>>, ".");
String valorFinal= "";
//se tiver algum valor depois do ponto....
// ele vai continuar percorrendo
while(token.hasMoreTokens())
{
valorFinal+= token.nextToken();
}
//agora ele substitui a virgula por ponto final
valor= valorFinal.replace(',','.');
// agora só setar o valor no VO
vo.setValor(Double.parseDouble(valor));
Por causa de “regional settings” é melhor criar seu DecimalFormat assim, se você souber que sempre os dados virão com vírgula em vez de ponto, e os valores negativos irão vir com () em vez do sinal de menos:
DecimalFormat df = new DecimalFormat("#,##0.00;(#,##0.00)",
new DecimalFormatSymbols(new Locale("pt", "BR")));
Que é um porre, é, mas você tem certeza absoluta que os dados irão ser corretamente interpretados.
Como de costume, encapsule a criação de seu DecimalFormat em uma rotina utilitária.
Pegunta: você pegou o valor com getDouble - aqui você tem um valor do tipo double.
Aí você formatou - e transformou em uma string.
Aí você queria converter de novo a string para double - por quê?
E depois, pelo que vi, você queria pegar esse double.
AH desisto nada funciona… Oh “rapazim esperto” que criou o BD utilizou o campo como Double e na hora de delimitar o numero de casas decimais desse campo no BD, ele não delimito. Ai tenho o segintes valores no BD: 120.0000000000000000000000000000000
595.0000000000000000000000000000000
Que significam 120,00 e 595,00 srsr
Pelo que percebi, o Java está pegando e colocando “.”(ponto) de três em três zeros, ou seja não vira decimal e sim aumenta a ordem do numero. Então foi na raça do “emgaloba” mesmo e o código “Perfeito” fica assim:
public double LimitaDecimais(double d){
return Math.rint (d * 100.0) / 1000000000.0;
}
Mais ou menos o que você me falou Thingol, so que com alguns ZEROS a mais hehe, bom tá perfeito até o momento que der errado os valores! Bom valeu pela paciência ai!! Obrigado!