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

como saber si un string es un numero

Estas en el tema de como saber si un string es un numero en el foro de Java en Foros del Web. Hola, Estoy cargando datos desde una hoja excel. Y veo que alguno de los valores se guarda internamente como por ejemplo 8.90 y otros como ...
  #1 (permalink)  
Antiguo 21/05/2008, 12:03
 
Fecha de Ingreso: abril-2004
Mensajes: 185
Antigüedad: 20 años
Puntos: 0
como saber si un string es un numero

Hola,

Estoy cargando datos desde una hoja excel. Y veo que alguno de los valores se guarda internamente como por ejemplo 8.90 y otros como 8,90.

Hasta ahora usaba las siguientes instrucciones para saber si es un numero

try {
Double.parseDouble(cadena);
return true;
} catch (NumberFormatException nfe){
return false;
}

Pero el valor que viene como 8,90 me da "false".

1ª ¿Como puedo hacer para saber si un string contiene numeros independientemente de que se guarden como 8.90 ó 8,90?



2º ¿Como pasar los que se guardan como 8,90 a 8.90?



Gracias.
__________________
Recologic
  #2 (permalink)  
Antiguo 21/05/2008, 12:53
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: como saber si un string es un numero

Hola,

Por defecto los numeros se interpretan dependiendo del idioma del S.O. donde estes, y en tu caso parece que el '.' es el separador decimal y ',' el de los millares, por eso te da error con 8,90.

Para leer los numeros en otro formato, se usa el metodo parse de la clase DecimalFormat:
http://java.sun.com/j2se/1.5.0/docs/...malFormat.html
donde le puedes decir que simbolos ha de usar como separadores ( a traves de la clase DecimalFormatSymbols)

En cuanto a como pasar los numeros de un formato a otro... si sabes que no vas a tener numeros con millares, puedes hacer un simple replace de ',' por '.'. Si no, pues tendras que probar a ver si con alguno de los dos formatos te devuelve un numero. En caso de que pudieras tener 3 decimales... no podrias saber de que numero estas hablando, si solo tienes dos decimales como mucho, entonces si.

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #3 (permalink)  
Antiguo 22/05/2008, 13:46
 
Fecha de Ingreso: abril-2004
Mensajes: 185
Antigüedad: 20 años
Puntos: 0
Respuesta: como saber si un string es un numero

Gracias GreenEyed,

Al final he optado por el replace. Posteo lo que he hecho por si alguno le sirve.

java.text.DecimalFormat df = new java.text.DecimalFormat();
DecimalFormatSymbols dfs = df.getDecimalFormatSymbols();

String numeroString = "121.123,12";
if (true != Rutinas.isNumberFloat(numeroString)){
numeroString =Rutinas.corregirFormatoNumero(numeroString, dfs);
}

Ademas tengo una clase Rutinas donde tengo los siguientes metodos:

// Sirve para saber si una cadena de texto contiene un numero.

public static boolean isNumberFloat(String cadena) {
try {
Float.parseFloat(cadena);
return true;
} catch (NumberFormatException nfe){
return false;
}
//
} // fin de metodo

// Sirve para cambiar la , decimal por el . o viceversa

public static String corregirFormatoNumero(String cadena) {
java.text.DecimalFormat df = new java.text.DecimalFormat();
java.text.DecimalFormatSymbols dfs = df.getDecimalFormatSymbols();
return corregirFormatoNumero(cadena , dfs);
//
} // fin de metodo

public static String corregirFormatoNumero(String cadena, java.text.DecimalFormatSymbols dfs) {
char ds = dfs.getDecimalSeparator();
char gs = dfs.getGroupingSeparator();
char auxiliar = '*';
String cadena1 = cadena.replace(gs,auxiliar);
String cadena2 = cadena1.replace(ds,gs);
String cadena3 = cadena2.replace(auxiliar,ds);
return cadena3;
// return cadena.replace(gs,asterisco).replace(ds,gs).replac e(asterisco,ds);
//
} // fin de metodo
__________________
Recologic
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 17:07.