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é ocurre si quiero tener unos pocos parámetros double/float
y solo quiero que el segundo tenga 2 dígitos después de .
? Traté de 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.Parámetro doble con 2 dígitos después del punto en strings.xml?
Respuesta
Si se tratara de mí me gustaría almacenar los valores de los recursos como valores simples, y luego usar métodos formateador para controlar la forma en que 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);
}
ahora que esta respuesta es que llega demasiado tarde ... pero espero poder ayudar a otras personas:
Android chupa con múltiples parámetros sustituciones cuando se desea que los números decimales y formatear esta en un estilo común% a.bf
La mejor solución que han encontrado (y solo para este tipo de recursos) ES) es poner los parámetros decimales como cadenas% n $ s y en el Código se aplican con mi conversión String.Format (...)
Ejemplo:
INCORRECTA:
// en el 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 correcto, pero incorrecta debido a un sistema de recursos de sustitución de Android por lo la última línea generará una excepción.
CORRECTA/SOLUCIÓN:
simplemente convertir 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);
¿Cuál es el tipo de 'spercentage' en su ejemplo" incorrecto "? Supongo (como indica @Nik Reiman) que es un 'String', es decir, no es de extrañar que obtengas una excepción cuando tratas de pasarlo como float (en'% 2 $ .2f'). Esta "respuesta" es incompleta y engañosa. – BadCash
También no puedo obtener flotantes formateados para que funcionen desde un recurso de cadena, y sí, estoy pasando un flotador. Utilizo "% 1 $ 0.6f" en el recurso de cadena, y recibo una excepción: java.util.MissingFormatWidthException:% 01 $ .6f, por lo que se está mutilando de alguna manera. Esta respuesta es correcta. – Aaron
Simplemente añadiendo a la respuesta de @ David Airam aquí; la solución "incorrecta" que da es en realidad correcta, pero con un poco de ajuste.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 de que @ David Airam informó es de tratar de atascar un String
en un especificador de formato con %f
, que requiere una tipo de punto flotante Use float
y no hay tal excepción.
Además, puede usar Float.valueOf()
para convertir una Cadena en un flotador en caso de que sus datos de entrada fueran originalmente una cadena (por ejemplo, de un EditText
o algo así). Sin embargo, debe siempre probar/atrapar valueOf()
operaciones y manejar el caso NumberFormatException
, ya que esta excepción está desmarcada.
¡Gracias! Ahorré mi tiempo –
% .1f trabajo para mí si usted gusta mostrar sólo un 1 dígito después ''
- 1. Punto flotante con 2 dígitos después del punto
- 2. Establezca el número de dígitos después del punto en doble
- 3. desea mostrar exactamente 2 dígitos después del punto
- 4. LISP - dígitos después del punto decimal
- 5. Precisión del doble después del punto decimal
- 6. Imprimir float PHP con 3 dígitos después del punto decimal?
- 7. ¿Cómo devolver el número de flotante con 2 dígitos después del punto decimal?
- 8. printf% f con solo 2 números después del punto decimal?
- 9. Eliminación de caracteres después del punto decimal para un doble
- 10. Salida de flujo en C++ con 3 dígitos después del punto decimal. ¿Cómo?
- 11. Cómo convertir a doble con 2 precisión - cadena tras punto?
- 12. Dividir el doble en dos int, un int antes del punto decimal y uno después de
- 13. iPhone: Cuantos dígitos debería haber después de un punto flotante
- 14. Encontrar el número de posiciones después del punto de un doble
- 15. ayuda con Regex - necesita hasta 3 números después del punto (.)
- 16. Cómo formatear ¿Doble con punto?
- 17. ¿Cómo usar el filtro de flotador para mostrar solo dos dígitos después del punto decimal?
- 18. Comparar 2 dobles pero sin todos los dígitos en C
- 19. Formato tipo doble con el número mínimo de dígitos decimales
- 20. ¿Cómo extraer dígitos fraccionarios de doble/BigDecimal
- 21. Determinación del punto medio entre 2 coordenados
- 22. Regex permitir dígitos y un solo punto
- 23. punto flotante de doble precisión en CUDA
- 24. Deje solo dos decimales después del punto
- 25. Cómo recortar ceros después del punto decimal
- 26. AspectJ: parámetro en un corte de punto
- 27. ¿Cómo redondear el número decimal a 2 dígitos en iphone?
- 28. Dividir dígitos con espacios por grupos de 3 en java
- 29. Cómo poner un punto después de tres dígitos de un número
- 30. ¿Por qué la variable flotante ahorra valor al cortar los dígitos después del punto de una manera extraña?
Gracias, amigo, pero debo supervisado ... '% 1 $ .2f' funciona tan bien. – lomza
¡El comentario aquí es la respuesta real! Deberías ponerlo como otra respuesta a esta pregunta. Casi no lo vi – accordionfolder
la respuesta de Iomza en los comentarios es la solución real – Kachi