J'ai des problèmes pour formater les décimales d'un double. Si j'ai une valeur double, par exemple 4.0, comment formater les décimales pour qu'elles soient 4,00 à la place?
J'ai des problèmes pour formater les décimales d'un double. Si j'ai une valeur double, par exemple 4.0, comment formater les décimales pour qu'elles soient 4,00 à la place?
Réponses:
L'un des moyens serait d'utiliser NumberFormat .
NumberFormat formatter = new DecimalFormat("#0.00");
System.out.println(formatter.format(4.0));
Production:
4,00
Avec Java 8, vous pouvez utiliser la format
méthode ..: -
System.out.format("%.2f", 4.0); // OR
System.out.printf("%.2f", 4.0);
f
est utilisé pour la floating
valeur en points.2
après la décimale, le nombre de décimales après .
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);
Selon la documentation:
La locale toujours utilisée est celle renvoyée par
Locale.getDefault()
.
En utilisant String.format, vous pouvez faire ceci:
double price = 52000;
String.format("$%,.2f", price);
Remarquez la virgule qui rend cela différent de la réponse de @ Vincent
Production:
$52,000.00
Une bonne ressource pour la mise en forme est officielle page java sur le sujet
Vous pouvez toujours utiliser la méthode statique printf from System.out
- vous implémentez ensuite le formateur correspondant; cela économise de l'espace de tas dans lequel d'autres exemples vous obligent à faire.
Ex:
System.out.format("%.4f %n", 4.0);
System.out.printf("%.2f %n", 4.0);
Économise de l'espace sur le tas, ce qui est un gros bonus, néanmoins je suis d'avis que cet exemple est beaucoup plus gérable que toute autre réponse, d'autant plus que la plupart des programmeurs connaissent la fonction printf à partir de C (Java change légèrement la fonction / méthode).
out
est le PrintStream
.
double d = 4.0;
DecimalFormat nf = DecimalFormat.getInstance(Locale.ENGLISH);
System.out.println(nf.format("#.##"));
new DecimalFormat("#0.00").format(4.0d);
Une autre méthode consiste à utiliser la setMinimumFractionDigits
méthode de la NumberFormat
classe.
Ici, vous spécifiez essentiellement le nombre de nombres que vous souhaitez afficher après la virgule décimale.
Donc, une entrée de 4.0
produirait 4.00
, en supposant que votre montant spécifié était de 2.
Mais, si votre Double
entrée contient plus que le montant spécifié, il prendra le montant minimum spécifié, puis ajoutera un chiffre supplémentaire arrondi vers le haut / bas
Par exemple, 4.15465454
avec une quantité minimale de 2 spécifiée produira4.155
NumberFormat nf = NumberFormat.getInstance();
nf.setMinimumFractionDigits(2);
Double myVal = 4.15465454;
System.out.println(nf.format(myVal));
Il existe de nombreuses façons de procéder. Ceux-ci sont donnés ci-dessous:
Supposons que votre numéro d'origine soit indiqué 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 motif:
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 motif
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 :
Lors de l'arrondi, vous pouvez ajouter RoundingMode
votre formateur. Voici quelques modes d'arrondi 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;
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));
OU
DecimalFormat decimalFormat = new DecimalFormat("#0.00");
System.out.println(decimalFormat.format(4.0));
Si vous souhaitez le convertir en format de chaîne simple
System.out.println(String.format("%.2f", 4.0));
Tout le code ci-dessus imprimera 4,00
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));
}
}
Première importation NumberFormat
. Puis ajoutez ceci:
NumberFormat currencyFormatter = NumberFormat.getCurrencyInstance();
Cela vous donnera deux décimales et mettra un signe dollar s'il s'agit de monnaie.
import java.text.NumberFormat;
public class Payroll
{
/**
* @param args the command line arguments
*/
public static void main(String[] args)
{
int hoursWorked = 80;
double hourlyPay = 15.52;
double grossPay = hoursWorked * hourlyPay;
NumberFormat currencyFormatter = NumberFormat.getCurrencyInstance();
System.out.println("Your gross pay is " + currencyFormatter.format(grossPay));
}
}
Vous pouvez le faire comme suit:
double d = 4.0;
DecimalFormat df = new DecimalFormat("#.##");
System.out.print(df.format(d));
##
place de00
Je sais que c'est un vieux sujet, mais si vous aimez vraiment avoir le point au lieu de la virgule, enregistrez simplement votre résultat sous X, 00 dans une chaîne, puis modifiez-le simplement pour une période pour obtenir le X.00
Le moyen le plus simple consiste simplement à utiliser replace.
String var = "X,00";
String newVar = var.replace(",",".");
La sortie sera le X.00 que vous vouliez. Aussi pour faciliter les choses, vous pouvez tout faire en un seul et l'enregistrer dans une double variable:
Double var = Double.parseDouble(("X,00").replace(",",".");
Je sais que cette réponse n'est pas utile pour le moment, mais peut-être que quelqu'un qui vérifie ce forum cherchera une solution rapide comme celle-ci.
String.format()
oujava.text.Format
.