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?
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));
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
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)
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:
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.
É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
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);
}
vous pouvez également utiliser la solution ci-dessous -
public static String getRoundOffValue(double value){
DecimalFormat df = new DecimalFormat("##,##,##,##,##,##,##0.00");
return df.format(value);
}
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
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.
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.