web-dev-qa-db-fra.com

Comment formater un numéro de chaîne pour qu'il comporte des virgules et des arrondis?

Quel est le meilleur moyen de formater le nombre suivant qui m’est donné sous forme de chaîne?

String number = "1000500000.574" //assume my value will always be a String

Je veux que cela soit une chaîne avec la valeur: 1,000,500,000.57

Comment puis-je le formater comme tel?

125
Sheehan Alam

Vous voudrez peut-être regarder la classe DecimalFormat ; il prend en charge différents paramètres régionaux (par exemple, dans certains pays, le formatage serait 1.000.500.000,57 à la place).

Vous devez également convertir cette chaîne en un nombre, ceci peut être fait avec:

double amount = Double.parseDouble(number);

Exemple de code:

String number = "1000500000.574";
double amount = Double.parseDouble(number);
DecimalFormat formatter = new DecimalFormat("#,###.00");

System.out.println(formatter.format(amount));
236
NullUserException

Cela peut également être accompli à l'aide de String.format (), ce qui peut s'avérer plus simple et/ou plus flexible si vous formatez plusieurs nombres en une seule chaîne.

    String number = "1000500000.574";
    Double numParsed = Double.parseDouble(number);

    System.out.println(String.format("The input number is: %,.2f", numParsed));
    // Or
    String numString = String.format("%,.2f", numParsed);

Pour la chaîne de format "% ,. 2f" - "," signifie des groupes de chiffres séparés par des virgules, et ".2", arrondis à deux endroits après la décimale.

Pour plus d'informations sur les autres options de formatage, voir https://docs.Oracle.com/javase/tutorial/Java/data/numberformat.html

37
Greg H

Une fois que vous avez converti votre chaîne en un nombre, vous pouvez utiliser

// format the number for the default locale
NumberFormat.getInstance().format(num)

ou

// format the number for a particular locale
NumberFormat.getInstance(locale).format(num)
36
Aaron Novstrup

J'ai créé mon propre utilitaire de formatage. Ce qui est extrêmement rapide au traitement de la mise en forme et qui vous donne de nombreuses fonctionnalités :)

Ça supporte:

  • Format de virgule, par exemple 1234567 devient 1 234 567.
  • Préfixe avec "Mille (K), Millions (M), Milliards (B), Trillions (T)".
  • Précision de 0 à 15.
  • Redimensionnement de précision (signifie si vous voulez une précision de 6 chiffres, mais que vous n’avez que 3 chiffres disponibles, il est forcé à 3).
  • Abaissement de préfixe (signifie que si le préfixe que vous choisissez est trop grand, il le réduit à un préfixe plus approprié).

Le code peut être trouvé ici . Vous l'appelez comme ça:

public static void main(String[])
{
   int settings = ValueFormat.COMMAS | ValueFormat.PRECISION(2) | ValueFormat.MILLIONS;
   String formatted = ValueFormat.format(1234567, settings);
}

Je devrais également souligner que cela ne gère pas la prise en charge décimale, mais est très utile pour les valeurs entières. L'exemple ci-dessus afficherait "1,23 M" en sortie. Je pourrais probablement ajouter une prise en charge décimale peut-être, mais je ne voyais pas trop d'utilisation, car je pourrais aussi bien la fusionner dans un type de classe BigInteger qui gère des tableaux de caractères compressés [] pour les calculs mathématiques.

11
Jeremy Trifilo

Étant donné que c’est le premier résultat de Google pour format number commas Java, voici une réponse qui convient aux personnes qui travaillent avec des nombres entiers et se moquent des décimales.

String.format("%,d", 2000000)

les sorties:

2,000,000
8
Ben Watson
public void convert(int s)
{
    System.out.println(NumberFormat.getNumberInstance(Locale.US).format(s));
}

public static void main(String args[])
{
    LocalEx n=new LocalEx();
    n.convert(10000);
}
6
user3314142

vous pouvez également utiliser la solution ci-dessous -

public static String getRoundOffValue(double value){

        DecimalFormat df = new DecimalFormat("##,##,##,##,##,##,##0.00");
        return df.format(value);
}
5
Jitendra Nath

Voici le moyen le plus simple d'y arriver:

String number = "10987655.876";
double result = Double.parseDouble(number);
System.out.println(String.format("%,.2f",result)); 

sortie: 10 987 655,88

3
John Paker

Vous pouvez effectuer la conversion complète sur une seule ligne, en utilisant le code suivant:

String number = "1000500000.574";
String convertedString = new DecimalFormat("#,###.##").format(Double.parseDouble(number));

Les deux derniers signes # du constructeur DecimalFormat peuvent également être des 0. De toute façon, ça marche.

3
Peter Griffin

La première réponse fonctionne très bien, mais pour ZERO/0, le formatage sera .00

Par conséquent, le format #, ## 0.00 fonctionne bien pour moi. Testez toujours différents nombres tels que 0/100/2334.30 et des nombres négatifs avant de procéder au déploiement dans le système de production.

2
Venod Raveendran