165 votes

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

Quelle est la meilleure façon 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 ce soit une chaîne avec la valeur: 1,000,500,000.57

Comment puis-je le formater comme tel?

283voto

NullUserException Points 42268

Vous voudrez peut-être regarder la classe DecimalFormat ; il prend en charge différents paramètres régionaux (par exemple, dans certains pays, ils seront au format 1.000.500.000,57 ).

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));
 

Le voir sur ideone

44voto

Aaron Novstrup Points 10742

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)
 

13voto

Jeremy Trifilo Points 131

J'ai créé mon propre utilitaire de mise en forme. Ce qui est extrêmement rapide au traitement de la mise en forme, ainsi que de donner de nombreuses fonctionnalités :)

Il prend en charge:

  • Virgule Formatage E. g. 1234567 devient 1,234,567.
  • Préfixant avec "Mille(K),M(M),Milliards de dollars(B),milliards de dollars(T)".
  • Précision de 0 à 15.
  • La précision de re-dimensionnement (Signifie que si vous voulez des codes à 6 chiffres de précision, mais seulement 3 chiffres disponibles, il l'oblige à 3).
  • Préfixe abaisser (Signifie que si le préfixe que vous avez choisi est trop grand, il abaisse-il plus convenable de préfixe).

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

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

Je devrais également mentionner ce ne gère pas les décimales de soutien, mais c'est très utile pour les valeurs entières. L'exemple ci-dessus serait montrer "1,23 M" comme la sortie. Je pourrais probablement ajouter des décimales de soutien peut-être, mais ne voient pas trop l'utiliser car alors je pourrais aussi bien fusionner en un BigInteger type de classe qui gère comprimé char[] des tableaux de calculs mathématiques.

6voto

user3314142 Points 1
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);
}

6voto

Jitendra Nath Points 179

vous pouvez également utiliser la solution ci-dessous -

public statique String getRoundOffValue (valeur double) {

     DecimalFormat df = new DecimalFormat("##,##,##,##,##,##,##0.00");
    return df.format(value);
 

}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X