Je veux avoir un paramètre dans une chaîne dans strings.xml
et ce paramètre doit être une valeur double. J'utilise donc %1$f
. Ici - http://developer.Android.com/reference/Java/util/Formatter.html il existe de nombreux exemples, mais que se passe-t-il si je veux en avoir quelques double/float
paramètres et je veux que le deuxième ait seulement 2 chiffres après .
? J'ai essayé d'utiliser des combinaisons comme %2$.2f
ou %2.2$f
. Aucun d'eux ne fonctionnait. %.1f
ne fonctionne pas aussi bien. Alors, est-ce que quelqu'un sait comment "personnaliser" un float/double
valeur dans un strings.xml
? Merci.
Ajout juste à la réponse de @David Airam ici; la solution "incorrecte" qu'il donne est en fait correcte, mais avec quelques ajustements. Le fichier XML doit contenir:
<string name="resource1">Hello string: %1$s, and hello float: %2$.2f.</string>
Maintenant dans le Java code:
String svalue = "test";
float sfloat= 3.1415926;
String sresult = getString(R.string.resource1, svalue, sfloat);
L'exception signalée par @David Airam est d'essayer de bloquer un String
dans un spécificateur de format avec %f
, Qui nécessite un type à virgule flottante. Utilisez float
et il n'y a pas une telle exception.
En outre, vous pouvez utiliser Float.valueOf()
pour convertir une chaîne en un flottant au cas où vos données d'entrée étaient à l'origine une chaîne (par exemple, à partir d'un EditText
ou quelque chose). Cependant, vous devez toujours essayer/attraper les opérations valueOf()
et gérer le cas NumberFormatException
, car cette exception n'est pas cochée.
% .1f fonctionne pour moi si vous aimez afficher seulement 1 chiffre après ','
Définissez le fichier strings.xml
<string name="price_format">$%,.2f</string>
//For using in databinding where amount is double type
Android:text="@{@string/price_format(model.amount)}"
//For using in Java runtime where priceOfModifier is double type
amountEt.setText(context.getResources().getString(R.string.price_format, priceOfModifier));