web-dev-qa-db-fra.com

Comment formater un numéro de chaîne avec des virgules Android Modifier le champ

Pour quelle fonction puis-je utiliser dans Android) pour afficher le nombre dans différents formats.

Par exemple, si je saisis 1000, il devrait s’afficher comme ceci 1000. Si j'entre 10000, il devrait afficher comme ceci 10.000. Si j'entre 1000000, alors il devrait afficher comme ceci 1.000.000.

Guidez-moi s'il-vous-plaît.

60
user1082964

Vous pouvez utiliser DecimalFormat et simplement formater le nombre

DecimalFormat formatter = new DecimalFormat("#,###,###");
String yourFormattedString = formatter.format(100000);

Le résultat sera

  • 1,000,000 Pour 1000000
  • 10,000 Pour 10000
  • 1,000 Pour 1000

Mise à jour 12/02/2019

Cette String.format("%,d", number) constituerait une meilleure solution (moins codée en dur) comme indiqué dans les commentaires ci-dessous par @DreaminginCode. J'ai donc pensé l'ajouter ici comme alternative.

139
Neil

essayez celui-ci espère que cela aidera.

 System.out.println(NumberFormat.getNumberInstance(Locale.US).format(1000));
39
Sandeep
private String getFormatedAmount(int amount){
  return NumberFormat.getNumberInstance(Locale.US).format(amount);
}
10
YLS
int[] numbersToFormat = new int[]
  { 1, 10, 100, 10000, 100000, 1000000, 10000000, 100000000, 1000000000 };


for (int number : numbersToFormat) {
  System.out.println(  
    NumberFormat.getNumberInstance(Locale.getDefault()).format(number));
}

SORTIE

1
10
100
10,000
100,000
1,000,000
10,000,000
100,000,000
1,000,000,000
3
Codeversed

Ajoutez un écouteur de modification de texte comme ci-dessous (Assurez-vous également que le type de saisie sélectionné pour Edittext est Number):

etTest.addTextChangedListener(new TextWatcher() {

        boolean isManualChange = false;

        @Override
        public void onTextChanged(CharSequence s, int start, int before,
                int count) {
            if (isManualChange) {
                isManualChange = false;
                return;
            }

            try {
                String value = s.toString().replace(",", "");
                String reverseValue = new StringBuilder(value).reverse()
                        .toString();
                StringBuilder finalValue = new StringBuilder();
                for (int i = 1; i <= reverseValue.length(); i++) {
                    char val = reverseValue.charAt(i - 1);
                    finalValue.append(val);
                    if (i % 3 == 0 && i != reverseValue.length() && i > 0) {
                        finalValue.append(",");
                    }
                }
                isManualChange = true;
                etTest.setText(finalValue.reverse());
                etTest.setSelection(finalValue.length());
            } catch (Exception e) {
                // Do nothing since not a number
            }
        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {
            // TODO Auto-generated method stub

        }

        @Override
        public void afterTextChanged(Editable s) {
            // TODO Auto-generated method stub

        }
    });
2
Eldhose M Babu

Ajouter cette fonction dans la classe commune

  public static String getFormatedNumber(String number){
        if(!number.isEmpty()) {
            double val = Double.parseDouble(number);
            return NumberFormat.getNumberInstance(Locale.US).format(val);
        }else{
            return "0";
        }
    }

Et utilisez cette fonction partout comme ceci:

String newNumber = Utils.getFormatedNumber("10000000");
1
Kush

Vous pouvez utiliser Numberformat

public static double getNumberByString(String s) throws ParseException {
    return NumberFormat.getInstance(Locale.getDefault()).parse(s).doubleValue();
}
1
public static String formatNumber(int number){
    return NumberFormat.getNumberInstance(Locale.getDefault()).format(number);
}
public static String formatNumber(String number){
    return NumberFormat.getNumberInstance(Locale.getDefault()).format(Integer.parseInt(number));
}
0
Atiar Talukdar