JSP (Java Server Page) - Necesito ayuda con Float.parseFloat por favor..!!!

 
Vista:

Necesito ayuda con Float.parseFloat por favor..!!!

Publicado por Castugal (6 intervenciones) el 14/02/2007 04:11:48
Hola!!!!!!!!!!!!!!!!!!

De una Base de datos estoy tomando un campo IMPORTE de una tabla ESQ_PAGO

String q_="select INFO_CLIENTE.nombre, ESQ_PAGO.no_pago, ESQ_PAGO.concepto, ESQ_PAGO.importe, INFO_CLIENTE.no_cliente FROM INFO_CLIENTE, ESQ_PAGO WHERE (INFO_CLIENTE.no_cliente=ESQ_PAGO.no_cliente)";
esa es mi consulta, cuando uso
float suma=Float.parseFloat(tabla.getString(4));
en el explorador aparece un error que dice:

95: float suma=Float.parseFloat(tabla.getString(4));

java.lang.NumberFormatException: empty String
sun.misc.FloatingDecimal.readJavaFormatString(Unknown Source)
java.lang.Float.parseFloat(Unknown Source)
segun yo esto lo dice porque encuentra vacia la cadena, pero si cambio

float suma=Float.parseFloat(tabla.getString(4));

por:

out.println("valor en cadena----------->>>>"+tabla.getString(4));

entonces puedo visualizar el contenido de el campo en ese punto.

si alguien sabe cual es el problema al que me enfrento y me puede ayudar, estaré muy agradecido..!!!!!!!!!!!!!!!!!!!!!!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Necesito ayuda con Float.parseFloat por favor..

Publicado por Gonzalo (72 intervenciones) el 14/02/2007 09:22:42
Y exactamente, ¿cuál es el contenido que visualizas cuando pones el out.print? Porque saber eso ayudaría bastante a resolver el problema.

Por ahora lo único que puedo decirte es que si la cadena está realmente vacía ("") es normal que te dé una excepción.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Necesito ayuda con Float.parseFloat por favor..

Publicado por Castugal (6 intervenciones) el 15/02/2007 03:49:14
Lo que me muestra en pantalla es lo contenido en campo de mi tabla ESQ_PAGO por ejemplo abro mi tabla (que es de una base de datos de Access) y verifico el contenido digamos 1234.95
entonces pruebo mi codigo en mozilla fire fox comento las lineas 1 y 2 solo para ver que muestra en pantalla y lo que veo es justo el valor que tengo en mi base de datos
while(tabla.next()){
//aux=tabla.getString(4);
String aux=tabla.getString(4);
out.println("<TR>");
out.println("valor en cadena----------->>>>"+aux);
out.println("</TR>");
1 //float suma=Float.parseFloat(tabla.getString(4));
2 //float suma=((Float) aux).floatValue();;
out.println("<TR>");
out.println("suma----------->>>>"+suma);
out.println("</TR>");

};

luego si quito el comentario a cualquiera de las 2 lineas entonces me muestra el error que antes escribí

95: float suma=Float.parseFloat(tabla.getString(4));

java.lang.NumberFormatException: empty String
sun.misc.FloatingDecimal.readJavaFormatString(Unknown Source)
java.lang.Float.parseFloat(Unknown Source)

no entiendo que esta pasando la cadena no esta vacia pues lo puedo constar al quitar los comentarios de cualquiera de las 2 lineas (1 o 2 que marque arriba) al hacerlo me aparece el valor que la cadena tiene ewn el campo correspondiente....

ya tengo dias tratando de encontrar el error y nadamas no doy con el, pense que no prodria usar el parseFloat pero ya lo hice con una cadena constante y al imprimir suma puedo ver el valor constante que coloque por ejemplo

float suma=Float.parseFloat("1234.554");

entonces si puedo ver impreso el valor de suma
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Necesito ayuda con Float.parseFloat por favor..

Publicado por Gonzalo (72 intervenciones) el 15/02/2007 08:32:10
No me expresé bien... Lo que quería decir es, donde pones la línea que saca lo de "valor en cadena---------->>>>" + aux, _exactamente_ qué es lo que sale. Un ejemplo de cómo se ve. Prueba esto que sigue y dime exactamente qué sale:

while(tabla.next()){
····String aux=tabla.getString(4);
····out.println("<TR>");
····out.println("valor en cadena----------->>>>"+aux);
····out.println("</TR>");
····float suma=Float.parseFloat(aux);
····out.println("<TR>");
····out.println("suma----------->>>>"+suma);
····out.println("</TR>");
};

Por cierto... tabla, ¿qué tipo es?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Necesito ayuda con Float.parseFloat por favor..

Publicado por Castugal (6 intervenciones) el 16/02/2007 02:50:42
Estado HTTP 500 -

type Informe de Excepción

mensaje

descripción El servidor encontró un error interno () que hizo que no pudiera rellenar este requerimiento.

excepción

org.apache.jasper.JasperException: Exception in JSP: /BIENESRAICES/consultadeudoresatrasados.jsp:108

105: out.println("<TR>");
106: out.println("valor en cadena----------->>>>"+aux);
107: out.println("</TR>");
108: float suma=Float.parseFloat(aux);
109: out.println("<TR>");
110: out.println("suma----------->>>>"+suma);
111: out.println("</TR>");

Stacktrace:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:504)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

causa raíz

java.lang.NumberFormatException: empty String
sun.misc.FloatingDecimal.readJavaFormatString(Unknown Source)
java.lang.Float.parseFloat(Unknown Source)
org.apache.jsp.BIENESRAICES.consultadeudoresatrasados_jsp._jspService(consultadeudoresatrasados_jsp.java:154)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:332)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

nota La traza completa de la causa de este error se encuentra en los archivos de diario de Apache Tomcat/5.5.17.
Apache Tomcat/5.5.17
eso es lo que me aparece con el codigo que me sugeriste...
-------------------------------------------------------------------------------------------------------
despues comente en 1

while(tabla.next()){
String aux=tabla.getString(4);
out.println("<TR>");
out.println("valor en cadena----------->>>>"+aux);
out.println("</TR>");
1 float suma=0;//Float.parseFloat(aux);
out.println("<TR>");
out.println("suma----------->>>>"+suma);
out.println("</TR>");
};

y lo que aparecio en pantalla fue

valor en cadena----------->>>>1334.54 suma----------->>>>0.0 valor en cadena----------->>>>332.89 suma----------->>>>0.0 valor en cadena----------->>>>12.34 suma----------->>>>0.0 valor en cadena----------->>>>122.222 suma----------->>>>0.0 valor en cadena----------->>>>122.222 suma----------->>>>0.0 valor en cadena----------->>>>665.7 suma----------->>>>0.0 valor en cadena----------->>>>1233.55 suma----------->>>>0.0 valor en cadena----------->>>>1233.122 suma----------->>>>0.0 valor en cadena----------->>>>332244.33 suma----------->>>>0.0 valor en cadena----------->>>>12233.545 suma----------->>>>0.0 valor en cadena----------->>>>998334.11 suma----------->>>>0.0 valor en cadena----------->>>>1233.56 suma----------->>>>0.0 valor en cadena----------->>>> suma----------->>>>0.0 valor en cadena----------->>>>1233.44 suma----------->>>>0.0 valor en cadena----------->>>>1222.4 suma----------->>>>0.0 valor en cadena----------->>>>1233.11 suma----------->>>>0.0 valor en cadena----------->>>>233444343.1 suma----------->>>>0.0 valor en cadena----------->>>>1000 suma----------->>>>0.0 valor en cadena----------->>>>1233 suma----------->>>>0.0 Este es el valor de i0 y este es el valor de la primer suma0.0

la tabla es una tabla de access la llame ESQ_PAGO el campo que estroy tratando se llama importe, longitud 50, no requerido, permite longitud cero, no indexado, sin compresion unicode, modo ime sin controles, modo de oraciónes IME nada, los demas atributos en blanco (formato, mascara de entrada, titulo, valor predeterminado, regla de validación, texto de validación, etiquetas inteligentes)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Necesito ayuda con Float.parseFloat por favor..

Publicado por Gonzalo (72 intervenciones) el 16/02/2007 08:52:22
Bien, ahí tienes el error:

...>0.0 valor en cadena----------->>>> suma---...

Hay una de las cadenas en la base de datos que está vacía (""). No puedes hacer un parseFloat de "" porque da una excepción.

Hay varias opciones:
1. No permitir que haya valores vacíos en la base de datos.
Puedes, por ejemplo, ponerle que esa columna sea numérica y por defecto valga 0.

2. Comprobar si es "" antes de hacer el parseFloat:
if (!aux.tirm().equals("")) suma += Float.parseFloat(aux);

3. Capturar la excepción
try {
···suma += Float.parseFloat(aux);
} catch (NumberFormatException nfe) {
····if (!aux.tirm().equals("")) {
········// Si ha fallado porque es "" puedes ignorarlo o puedes escribirlo en un log o enviar un error o lo que prefieras.
····}
}


De las tres soluciones, yo te recomendaría que hicieras la primera y la segunda. La primera porque es lo correcto. La segunda por si acaso, para que la aplicación no falle aunque la base de datos no esté bien.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Necesito ayuda con Float.parseFloat por favor..

Publicado por Gonzalo (72 intervenciones) el 19/02/2007 13:12:46
Nota: Donde dice .tirm() debería decir .trim()

Jo, y lo puse mal dos veces!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Necesito ayuda con Float.parseFloat por favor..

Publicado por dll (2 intervenciones) el 16/10/2007 19:04:03
tendrias que tener declarada tu variable suma con 0, y como le estas haciendo una suma tendria que ir a dentro de un while,
esta es la linea que tienes
float suma=Float.parseFloat(tabla.getString(4));

deberia de ir asi:
suma=suma + Float.parseFloat(tabla.getString(4));
y no hay ningun problema si no hay valor para suma.

Ahora si quieres mostrar lo que te trae el campo del query convierte el campo a caracter para que no te de ningun problema, ejemplo:
to_char(ESQ_PAGO.importe,'99,999,999.99') y despues solo tendria que ir out.println("valor en cadena----------->>>>"+tabla.getString(4));
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar