Erro em ajuste de casas decimais

7 respostas
F
Bom tenho um servlet que captura valores de um BD, estou tentando limitar o numero de casas decimais com o seguinte código:
try
{...
DecimalFormat df = new DecimalFormat("0.00");
while(rs.next()){
                ds.setValue(Double.parseDouble(df.format(rs.getDouble("valor"))), ...);

}
...}
Contudo recebo o seguinte erro:
HTTP Status 500 -

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

java.lang.NumberFormatException: For input string: "[telefone removido],58"
	sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1224)
	java.lang.Double.parseDouble(Double.java:482)
	RD_DiarioT.Consulta(RD_DiarioT.java:116)
	RD_DiarioT.doPost(RD_DiarioT.java:68)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:767)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:860)
	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	java.lang.reflect.Method.invoke(Method.java:585)
	org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:249)
	java.security.AccessController.doPrivileged(Native Method)
	javax.security.auth.Subject.doAsPrivileged(Subject.java:517)
	org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:282)
	org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:165)

note The full stack trace of the root cause is available in the Sun-Java-System/Application-Server logs.
Sun-Java-System/Application-Server
Não entendo o que está ocorrendo! Alguém sabe?

7 Respostas

F

Se o objeto valor estiver com vírgula troque por ponto.
:slight_smile:

F

Meu objeto valor vem do BD e lá ele já está com ponto. Valew

F

Só que sua exception está sendo gerada por causa disso.
:confused:
Vc jah resolveu o problema?

J

Não entendi porque você está pegando o valor do ResultSet como double, formatando ele como String (o que vai colocar uma , nele) e depois transformando em double de novo, não seria mais fácil assim?

ds.setValue(rs.getDouble("valor");
F
JairEleton é porque df.FORMAT so consigo aplicar em DOUBLE. Contudo o metodo que setei como DS do JfreeChart so aceita DOUBLE no 1º campo, para valores no grafico. Tentei da seguinte forma agora:
ds.setValue(Double.parseDouble(df.format(rs.getString("valor")))...
E obtive o erro:
HTTP Status 500 -

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

java.lang.IllegalArgumentException: Cannot format given Object as a Number
	java.text.DecimalFormat.format(DecimalFormat.java:480)
	java.text.Format.format(Format.java:133)
	RD_DiarioT.Consulta(RD_DiarioT.java:115)
	RD_DiarioT.doPost(RD_DiarioT.java:67)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:362)

note The full stack trace of the root cause is available in the Apache Tomcat/5.5.9 logs.
Apache Tomcat/5.5.9
Ou seja não posso trabalhar com ele direto como String, somente como Double
J

Mas se você não pode trabalhar com ele como String, porque está convertendo ele pra String usando o DecimalFormat? Ele já vem do ResultSet como double.

F

Da forma que você falou, eu ja havia tentado:

ds.setValue(rs.getDouble("valor"),...

Contudo aparece diversas casas decimais na escala do gráfico, então aplico o decimalFormat no Double Valor, para limitar o numero de casas decimais. Depois transformo em Double de novo, pois o metodo so aceita Double. Não vi outra solução para fazer, talvez tenha alguma sugestão…? Valew

Criado 26 de janeiro de 2007
Ultima resposta 26 de jan. de 2007
Respostas 7
Participantes 3