Foros del Web » Programación para mayores de 30 ;) » Java »

[SOLUCIONADO] Number format exception

Estas en el tema de Number format exception en el foro de Java en Foros del Web. Hola! Estoy haciendo un algoritmo y estoy empezando en la lectura de ficheros, al leer un fichero me sale el siguiente error: "Exception in thread ...
  #1 (permalink)  
Antiguo 18/03/2015, 11:31
Avatar de maiksix  
Fecha de Ingreso: noviembre-2014
Ubicación: Sabadell
Mensajes: 124
Antigüedad: 10 años, 1 mes
Puntos: 1
Number format exception

Hola!

Estoy haciendo un algoritmo y estoy empezando en la lectura de ficheros, al leer un fichero me sale el siguiente error:

"Exception in thread "main" java.lang.NumberFormatException: For input string: "2,0"
at sun.misc.FloatingDecimal.readJavaFormatString(Floa tingDecimal.java:1222)
at java.lang.Float.parseFloat(Float.java:422)
at InputsReader.muestraContenido(InputsReader.java:42 )
at Starter.main(Starter.java:10)"

He estado leyendo y se a que se debe, pero no como solucionarlo. He leído que quitando espacios al fichero se solucionaría pero no lo hace (ya me lo suponía)

El código es

Código:
public class InputsReader {
	
	public static void muestraContenido(String archivo) throws FileNotFoundException, IOException {
	      String cadena;
	      Input inputs = null;
	      int nNodes = 0;
	      FileReader f = new FileReader(archivo);
	      BufferedReader b = new BufferedReader(f);
	      
	   // 1. COUNT THE # OF NODES (# OF LINES IN nodesFilePath)
	      while((cadena = b.readLine())!=null) {
	    		  nNodes++;
	          System.out.println(cadena + "Numero de nodos:");
	      }
	      b.close();
	   // 2. CREATE THE INPUTS OBJECT WITH nNodes
          inputs = new Input(nNodes);
          
       // 3. CREATE ALL NODES AND FILL THE NODES LIST
          FileReader reader = new FileReader(archivo);
          Scanner in = new Scanner(reader);
          
          String s ="2.8";
          int k = 0;
          
          while( in.hasNextLine() )
          {   
        	  
        	  s = in.next();

                 float x = Float.parseFloat(s); AQUÍ ESTÁ EL FALLO

                  float y = in.nextFloat();
                  Node node = new Node(k, x, y);
                  inputs.getNodes()[k] = node;
                  k++;
                  System.out.println("Coordenada x:" + x + "Coordenadad y:" + y);
              }
          }
	
	}
He marcado en rojo el error ya que se donde está pero no se como solucionarlo. A ver si alguien puede echarme un mano

Gracias y un saludo!
__________________
Going hard for too long... Can't get enough
  #2 (permalink)  
Antiguo 18/03/2015, 13:12
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 10 años, 4 meses
Puntos: 182
Respuesta: Number format exception

Buenas,

Seguramente tienes problemas con el locale que está utilizando.

Utiliza mejor esto para convertir el "2.0":

Código Java:
Ver original
  1. NumberFormat nf = NumberFormat.getInstance(Locale.US);
  2. float x = nf.parse(s).floatValue();


Un saludo
__________________
If to err is human, then programmers are the most human of us
  #3 (permalink)  
Antiguo 19/03/2015, 10:52
Avatar de maiksix  
Fecha de Ingreso: noviembre-2014
Ubicación: Sabadell
Mensajes: 124
Antigüedad: 10 años, 1 mes
Puntos: 1
Respuesta: Number format exception

Hola! Gracias por tu respuesta, lo he probado y me indica un error

"Multiple markers at this line
- NumberFormat cannot be resolved
- Locale cannot be resolved to a variable
- NumberFormat cannot be resolved to a
type"

No se como solucionarlo, por lo que he buscado de locale lo que le dices es que entienda el punto como separador decimal... pero no veo porque salta este error.

Alguna idea?

Un saludo
__________________
Going hard for too long... Can't get enough
  #4 (permalink)  
Antiguo 19/03/2015, 11:53
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 20 años, 2 meses
Puntos: 454
Respuesta: Number format exception

¿Has puesto los import de esas clases NumberFormat y Locale?

De todas formas, si una vez resueltos los problemas de compilado sigue dándote el problema de la coma decimal ...

El error era

NumberFormatException: For input string: "2,0"

que significa posiblemente que espera un "2.0" con punto decimal en vez de un "2,0" con coma decimal. Float.parseFloat() espera punto decimal y por eso te da error, por lo que usando un NumberFormat adecuado se soluciona. Pero quita el parámetro Locale.US en la llamada a getInstante(). El Locale.US (Estados Unidos), usan el punto decimal en vez de la coma, al igual que lo hace por defecto Float.parseFloat(). Necesitas un Locale que use la coma decimal en vez de el punto decimal y si el idioma por defecto de tu windows es español, te vale el Locale por defecto, por lo que no necesitas poner parámetro en NumberFormat.getInstante().

Se bueno.
__________________
Apuntes Java
Wiki de Programación

Última edición por chuidiang; 19/03/2015 a las 12:03
  #5 (permalink)  
Antiguo 19/03/2015, 12:56
Avatar de maiksix  
Fecha de Ingreso: noviembre-2014
Ubicación: Sabadell
Mensajes: 124
Antigüedad: 10 años, 1 mes
Puntos: 1
Respuesta: Number format exception

Gracias por tu respuesta! No había puesto los import, ahora lo probare y solucionare lo del punto y la coma.

Os comento en un rato!

Gracias :)
__________________
Going hard for too long... Can't get enough
  #6 (permalink)  
Antiguo 19/03/2015, 13:42
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 10 años, 4 meses
Puntos: 182
Respuesta: Number format exception

Buenas,

Yo propuse el Local.US porque en su código el número que pretende convertir es:

Código Java:
Ver original
  1. String s ="2.8";

Con el punto como separador de decimales.


Un saludo
__________________
If to err is human, then programmers are the most human of us
  #7 (permalink)  
Antiguo 20/03/2015, 01:52
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 20 años, 2 meses
Puntos: 454
Respuesta: Number format exception

Hola:

Sí, la verdad que el código despista un poco, ya que pone s="2.8" pero lo primero que hace dentro del bucle es cambiarle el valor por lo que lea de un fichero. Es un valor un poco raro para inicializar un String que luego vas a cambiar.

"2.8" no debería darle ningún error con Float.parseFloat(). Posiblemente el problema es que en el fichero si tiene comas decimales (como parece indicar el error de parse "2,0").

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #8 (permalink)  
Antiguo 20/03/2015, 10:26
Avatar de maiksix  
Fecha de Ingreso: noviembre-2014
Ubicación: Sabadell
Mensajes: 124
Antigüedad: 10 años, 1 mes
Puntos: 1
Respuesta: Number format exception

Hola,

después de leer vuestros mensajes, comprobé el fichero y lo puse todo con ".". Ahora uso el Float.parseFloat y ya funciona a la perfección.

Así que lo marco como solucionado :)

Muchísimas gracias, y un saludo!

p.d: por el momento voy avanzando
__________________
Going hard for too long... Can't get enough

Etiquetas: exception, format, number, string
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:45.