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.
NumberFormat es el camino a seguir, pero debes ser consciente de sus peculiaridades que surgen cuando tus datos son menos del 100% correctos.
Encontré la siguiente utilidad:
http://www.ibm.com/developerworks/java/library/j-numberformat/index.html
Si puede confiar en su información, entonces no tiene que preocuparse por ello.
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)
NumberFormat
un NumberFormat
. Here hay un ejemplo, que creo que parece correcto.
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!