J'ai des problèmes pour formater les décimales d'un double. Si j'ai une double valeur, par exemple 4.0, comment formater les décimales pour que ce soit 4.00 à la place?
Un des moyens serait d'utiliser NumberFormat .
NumberFormat formatter = new DecimalFormat("#0.00");
System.out.println(formatter.format(4.0));
Sortie:
4,00
Avec Java 8, vous pouvez utiliser la méthode format
..: -
System.out.format("%.2f", 4.0); // OR
System.out.printf("%.2f", 4.0);
f
est utilisé pour floating
valeur en points ..2
après le signe décimal, nombre de décimales après le .
Pour la plupart des versions de Java, vous pouvez utiliser DecimalFormat
: -
DecimalFormat formatter = new DecimalFormat("#0.00");
double d = 4.0;
System.out.println(formatter.format(d));
Utilisez String.format :
String.format("%.2f", 4.52135);
En utilisant String.format, vous pouvez faire ceci:
double price = 52000;
String.format("$%,.2f", price);
Remarquez la virgule qui diffère de la réponse de @ Vincent
Sortie:
$52,000.00
Une bonne ressource pour le formatage est la page official Java sur le sujet.
Vous pouvez toujours utiliser la méthode statique printf from System.out
- vous devez alors implémenter le formateur correspondant; cela permet d'économiser de l'espace dans lequel d'autres exemples vous ont été demandés.
Ex:
System.out.format("%.4f %n", 4.0);
System.out.printf("%.2f %n", 4.0);
Économise beaucoup d'espace disque, ce qui est un bonus considérable. Néanmoins, je suis d'avis que cet exemple est beaucoup plus facile à gérer que toute autre réponse, d'autant plus que la plupart des programmeurs connaissent la fonction printf de C (Java modifie cependant légèrement la fonction/méthode).
new DecimalFormat("#0.00").format(4.0d);
double d = 4.0;
DecimalFormat nf = DecimalFormat.getInstance(Locale.ENGLISH);
System.out.println(nf.format("#.##"));
Une autre méthode consiste à utiliser la méthode setMinimumFractionDigits
de la classe NumberFormat
.
Ici, vous spécifiez essentiellement le nombre de chiffres que vous souhaitez voir après le signe décimal.
Donc, une entrée de 4.0
produirait 4.00
, en supposant que votre montant spécifié était 2.
Mais, si votre entrée Double
contient plus que le montant spécifié, il prendra le montant minimum spécifié, puis ajoutera un chiffre supplémentaire arrondi
Par exemple, 4.15465454
avec un montant minimum de 2 spécifié produira 4.155
NumberFormat nf = NumberFormat.getInstance();
nf.setMinimumFractionDigits(2);
Double myVal = 4.15465454;
System.out.println(nf.format(myVal));
Vous pouvez utiliser l'une des méthodes ci-dessous
Si vous utilisez Java.text.DecimalFormat
DecimalFormat decimalFormat = NumberFormat.getCurrencyInstance();
decimalFormat.setMinimumFractionDigits(2);
System.out.println(decimalFormat.format(4.0));
OR
DecimalFormat decimalFormat = new DecimalFormat("#0.00");
System.out.println(decimalFormat.format(4.0));
Si vous voulez le convertir en format de chaîne simple
System.out.println(String.format("%.2f", 4.0));
Tout le code ci-dessus sera imprimé 4.
Fonctionne à 100%.
import Java.text.DecimalFormat;
public class Formatting {
public static void main(String[] args) {
double value = 22.2323242434342;
// or value = Math.round(value*100) / 100.0;
System.out.println("this is before formatting: "+value);
DecimalFormat df = new DecimalFormat("####0.00");
System.out.println("Value: " + df.format(value));
}
}
Vous pouvez faire cela de plusieurs façons. Ceux-ci sont donnés ci-dessous:
Supposons que votre numéro d'origine est donné ci-dessous:
double number = 2354548.235;
Utilisation de NumberFormat:
NumberFormat formatter = new DecimalFormat("#0.00");
System.out.println(formatter.format(number));
Utilisation de String.format:
System.out.println(String.format("%,.2f", number));
Utilisation de DecimalFormat et du modèle:
NumberFormat nf = DecimalFormat.getInstance(Locale.ENGLISH);
DecimalFormat decimalFormatter = (DecimalFormat) nf;
decimalFormatter.applyPattern("#,###,###.##");
String fString = decimalFormatter.format(number);
System.out.println(fString);
Utilisation de DecimalFormat et du modèle
DecimalFormat decimalFormat = new DecimalFormat("############.##");
BigDecimal formattedOutput = new BigDecimal(decimalFormat.format(number));
System.out.println(formattedOutput);
Dans tous les cas, la sortie sera: 2354548.23
Remarque :
Pendant l’arrondi, vous pouvez ajouter RoundingMode
dans votre formateur. Voici quelques modes d'arrondissement donnés ci-dessous:
decimalFormat.setRoundingMode(RoundingMode.CEILING);
decimalFormat.setRoundingMode(RoundingMode.FLOOR);
decimalFormat.setRoundingMode(RoundingMode.HALF_DOWN);
decimalFormat.setRoundingMode(RoundingMode.HALF_UP);
decimalFormat.setRoundingMode(RoundingMode.UP);
Voici les importations :
import Java.math.BigDecimal;
import Java.math.RoundingMode;
import Java.text.DecimalFormat;
import Java.text.NumberFormat;
import Java.util.Locale;