web-dev-qa-db-fra.com

Double paramètre avec 2 chiffres après le point dans strings.xml?

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.

44
lomza

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.

124
Nik Reiman

% .1f fonctionne pour moi si vous aimez afficher seulement 1 chiffre après ','

4
Wael Ouni

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));
2
Aditya Rohilla