tipos datos convertir conversion cast java localization

datos - convertir string a char java



¿Cómo convierto un String a Double en Java usando una configuración regional específica? (8)

¿Sabes qué localidad es? Entonces puedes usar

DecimalFormat format = DecimalFormat.getInstance(theLocale); format.parse(yourString);

esto incluso funcionará para anotaciones científicas, cadenas con signos de porcentaje o cadenas con símbolos de moneda.

Quiero convertir algunos números que obtuve como dobles en Dobles, pero estos números no están en la configuración estándar de EE. UU., Sino en una diferente. ¿Cómo puedo hacer eso?


Aquí es cómo usa parseDouble para convertir una String a un Double :

doubleExample.java

import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class doubleExample { public static void main(String[] args) { Double myDouble = new Double("0"); System.out.println("Please enter a number:"); try { //get the number from console BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); myDouble = Double.parseDouble(br.readLine()); } //if invalid value was entered catch(NumberFormatException ne) { System.out.println("Invalid value" + ne); System.exit(0); } catch(IOException ioe) { System.out.println("IO Error :" + ioe); System.exit(0); } System.out.println("Double value is " + myDouble); } }


Esto no debería ser un problema con java.text.DecimalFormat.



Solo estoy aprendiendo java y programando. Tenía una pregunta similar. Encontré algo como esto en mi libro de texto:

Scanner sc = new Scanner(string); double number = sc.nextDouble();

El libro dice que un escáner decodifica automáticamente lo que está en una variabel String y que la clase Scanner se adapta automáticamente al idioma de la configuración regional, la configuración regional del sistema es la predeterminada, pero que es fácil de configurar para otra cosa.

Solucioné mi problema de esta manera. Tal vez esto podría funcionar para el problema anterior en lugar de analizar?

Además: la razón por la que me gustó este método fue el hecho de que cuando uso los cuadros de marcación dinámica para la entrada y luego trato de convertir la cadena en el doble con el análisis, obtuve una NumberFormatException. Resultó que el análisis utiliza exclusivamente el formato de número de EE. UU. Mientras que el escáner puede manejar todos los formatos. El escáner hizo que la entrada funcionara perfectamente incluso con el separador decimal de coma (,). Como la respuesta más votada utiliza el análisis, realmente no veo cómo resolvería este problema en particular. Tendría que ingresar sus números en el formato de EE. UU. Y luego convertirlos a su formato de configuración regional. Eso es bastante inconveniente cuando el teclado numérico está equipado con una coma.

Ahora todos ustedes son libres de destruirme en pedazos;)


Use NumberFormat.getNumberInstance (Locale)



Prueba java.text.NumberFormat . De los Javadocs:

Para formatear un número para una Configuración regional diferente, especifíquelo en la llamada a getInstance.

NumberFormat nf = NumberFormat.getInstance(Locale.FRENCH);

También puede usar un NumberFormat para analizar números:

myNumber = nf.parse(myString);

parse() devuelve un Number ; para obtener un double , debe llamar a myNumber.doubleValue() :

double myNumber = nf.parse(myString).doubleValue();

Tenga en cuenta que parse() nunca devolverá null , por lo que no puede causar una NullPointerException . En cambio, el parse arroja una ParseException marcada si falla.

Editar: Originalmente dije que había otra forma de convertir a double : lanzar el resultado a Double y usar unboxing. Pensé que, dado que se estaba utilizando una instancia de propósito general de NumberFormat (según Javadocs para getInstance ), siempre devolvería un Double . Pero DJClayworth señala que los Javadocs para parse(String, ParsePosition) (que se llama por parse(String) ) dicen que se devuelve un Long si es posible. ¡Por lo tanto, lanzar el resultado a Double no es seguro y no debería intentarlo!
Gracias, DJClayworth!