studio strings que quantity examples android string formatter

android - que - Doble parámetro con 2 dígitos después del punto en strings.xml?



string format arguments java (4)

% .1f trabaja para mí si desea mostrar solo 1 dígito después de '',''

Quiero tener un parámetro en una cadena en strings.xml y este parámetro debe ser un valor doble. Entonces uso %1$f . Aquí - http://developer.android.com/reference/java/util/Formatter.html hay muchos ejemplos, pero ¿qué pasa si quiero tener algunos parámetros double/float y quiero que solo el segundo tenga 2 dígitos despues ? Intenté usar combinaciones como %2$.2f o %2.2$f . Ninguno de ellos trabajó. %.1f no funciona tan bien. Entonces, ¿alguien sabe cómo puedo "personalizar" un valor float/double dentro de un strings.xml ? Gracias.


Ahora que esta respuesta llega demasiado tarde ... pero espero poder ayudar a otras personas:

Android apesta con múltiples sustituciones de parámetros cuando desea números decimales y formatea esto en el estilo común% a.bf

La mejor solución que he encontrado (y solo para este tipo de recursos) es poner los parámetros decimales como cadenas% n $ s y en el código aplicar mi conversión con String.format (...)



Ejemplo:


CAMINO INCORRECTO:

// En archivo xml:

<string name="resource1">You has a desviation of %1$s and that is a %2$.2f%% percentage.</string>

// Y en 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.



VÍA CORRECTA / SOLUCIÓN:

Simplemente convierte 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);


Si fuera yo, almacenaría los valores en los recursos como valores simples y luego usaría métodos de formateador para controlar cómo se muestran, aproximadamente de esta forma

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); }


Solo añadiendo a la respuesta de @David Airam aquí; la solución "incorrecta" que da es realmente 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 de Java:

String svalue = "test"; float sfloat= 3.1415926; String sresult = getString(R.string.resource1, svalue, sfloat);

La excepción informada por @David Airam es que intenta atascar una String en un especificador de formato con %f , que requiere un tipo de punto flotante. Usa float y no hay tal excepción.

Además, puede usar Float.valueOf() para convertir una Cadena en una flotación en caso de que sus datos de entrada EditText originalmente una cadena (por ejemplo, de un EditText o algo así). Sin embargo, siempre debe intentar / capturar las operaciones valueOf() y manejar el caso NumberFormatException , ya que esta excepción no está marcada.