Parámetro doble con 2 dígitos después del punto en strings.xml?
Quiero tener un parámetro en una cadena en strings.xml
y este parámetro debe ser un valor doble. Así que utilizo %1$f
. Aquí – http://developer.android.com/reference/java/util/Formatter.html hay muchos ejemplos, pero ¿qué pasa si quiero tener unos cuantos parámetros double/float
y sólo quiero que el segundo tenga 2 Dígitos después .
? Intenté usar combinaciones como %2$.2f
o %2.2$f
. Ni de ellos funcionó. %.1f
no funciona tan bien. Entonces, ¿alguien sabe cómo puedo "personalizar" un valor float/double
dentro de un strings.xml
? Gracias.
Si fuera yo, almacenaría los valores en los recursos como valores sencillos, y luego usaría métodos de formato para controlar cómo se muestran, más o menos así
public String formatFigureTwoPlaces(float value) { DecimalFormat myFormatter = new DecimalFormat("##0.00"); return myFormatter.format(value); } public String formatFigureOnePlace(float value) { DecimalFormat myFormatter = new DecimalFormat("##0.0"); return myFormatter.format(value); }
Sólo añadiendo a la respuesta de @David Airam aquí; La solución "incorrecta" que da es en realidad correcta, pero con un poco de ajustes. El archivo XML debe contener:
<string name="resource1">Hello string: %1$s, and hello float: %2$.2f.</string>
Ahora en el código Java:
String svalue = "test"; float sfloat= 3.1415926; String sresult = getString(R.string.resource1, svalue, sfloat);
La excepción que @David Airam informó es de intentar atascar una String
en un especificador de formato con %f
, lo que requiere un tipo de punto flotante. Utilice float
y no hay tal excepción.
Además, puede usar Float.valueOf()
para convertir una cadena en un flotante en caso de que los datos de entrada EditText
originalmente una cadena (digamos, de un EditText
o algo parecido). Sin embargo, siempre debe intentar / capturar operaciones de valueOf()
y manejar el caso NumberFormatException
, ya que esta excepción está desmarcada.
Ahora que esta respuesta está llegando demasiado tarde … pero espero ser capaz de ayudar a otras personas:
Android chupa con múltiples sustituciones de parámetros cuando se desean números decimales y formatear esto en estilo común% a.bf
La mejor solución que he encontrado (y sólo para este tipo de recursos) se pone los parámetros decimales como cadenas% n $ s y en el código aplique mi conversión con String.format (…)
Ejemplo:
MANERA INCORRECTA:
// En archivo xml:
<string name="resource1">You has a desviation of %1$s and that is a %2$.2f%% percentage.</string>
// Y en el archivo java
String sresult = getString(R.string.resource1, svalue, spercentage); // <-- exception!
Esta solución es técnicamente correcta pero incorrecta debido al sistema de recursos de sustitución de Android, por lo que la última línea generará una excepción.
CORREO / SOLUCIÓN:
Simplemente convierta el segundo parámetro en una cadena.
<string name="resource1">You has a desviation of %1$s and that is a %2$s percentage.</string>
Y ahora en el código:
... // This is the auxiliar line added to solve the problem String spercentage = String.format("%.2f%%",percentage); // This is the common code where we use the last variable. String sresult = getString(R.string.resource1, svalue, spercentage);