String.format utiliza coma en lugar de punto

Mi aplicación está trabajando en muchos dispositivos sin problemas hasta ahora. Pero ahora tengo mi nueva Galaxy Tab con Android 3.2 donde se bloquea todo el tiempo. Descubrí que el problema era un flotador en un EditText. Estoy utilizando myEditText.setText(String.format("%.1f", fMyFloat)); Para poner el flotador en el EditText. Pero de alguna manera el flotador en mi Tab 3.2 Galaxy se genera con una coma en lugar de un punto. Cuando leo el EditText de nuevo la aplicación se bloquea por supuesto, diciéndome que esto no es válido flotar debido a la coma …

¿Qué está pasando mal aquí?

Convertir flotante en cadena ..

De la documentación de String.format :

String.format (formato de cadena, objeto … args)

Devuelve una cadena formateada localizada, utilizando el formato y argumentos suministrados, utilizando la configuración regional predeterminada del usuario.

El texto citado anterior significa que la salida de String.format coincidirá con la configuración predeterminada que el usuario utiliza.

Como ejemplo, una coma se usaría como el delimitador de punto decimal si es un usuario que usa localidad sueca, pero un punto si está usando un americano.

Si desea forzar lo que se va a utilizar la configuración regional, utilice la sobrecarga de String.format que acepta tres parámetros:

  • String.format (entorno local, formato de cadena, objeto … args)

Convertir cadena a flotar ..

Parsing una cadena arbitraria en un flotador usando la configuración regional predeterminada es bastante fácil, todo lo que necesita hacer es utilizar DecimalFormat.parse .

A continuación, utilice .parse para obtener un Number y llamar a floatValue en este objeto devuelto.

String.format utiliza la configuración regional en la que se encuentra. Debería hacer algo como esto si desea un punto:

 NumberFormat formatter = NumberFormat.getInstance(Locale.US); myEditText.setText(formatter.format(fMyFloat); 

Echa un vistazo a NumberFormat para más opciones de formato

Su llamada de format en su Galaxy Tab utiliza algún idioma Locale predeterminado que a su vez utiliza , para los flotadores. Puede usar la String.format(Locale,String,...) con la configuración regional específica para que las cosas funcionen.

O deberías haber usado el mismo escenario para analizar y formatear el número. Así que probablemente debería ir con NumberFormat para formatear y analizar sus flotadores.

Utilice debajo del código que funciona para mí:

 NumberFormat nf = NumberFormat.getNumberInstance(Locale.US); DecimalFormat df = (DecimalFormat)nf; df.applyPattern(pattern); String output = df.format(value); System.out.println(pattern + " " + output + " " + loc.toString()); 
  • Cómo quitar el foco de EditText cuando el usuario se hace la edición?
  • Android EditText android: textDirection
  • Android: cómo borrar un edittext mediante botón cruzado en el lado derecho
  • ¿Cómo puedo detectar FocusText enfocado en android?
  • Deshabilitar (positivo) el botón de AlertDialog por defecto
  • Encuadernación para texto de sugerencia dentro de EditText
  • ¿Cómo convertir EditText en int? (Androide)
  • Android Custom EditText que no muestra el cursor en ICS
  • Cambiar tamaño del borde inferior de EditText
  • ¿Hay alguna manera de establecer la posición del cursor en EditText de izquierda a derecha 2dp
  • Centre Drawable y Text en EditText
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.