Puis-je le faire avec System.out.print
?
Vous pouvez utiliser la méthode printf
, comme suit:
System.out.printf("%.2f", val);
En bref, la syntaxe %.2f
indique à Java de renvoyer votre variable (val
) avec 2 décimales (.2
) en représentation décimale d'un nombre à virgule flottante (f
) à partir du début du spécificateur de format (%
).
Il existe d'autres caractères de conversion que vous pouvez utiliser en plus de f
:
d
: entier décimalo
: entier octale
: virgule flottante en notation scientifiqueVous pouvez utiliser DecimalFormat
. Une façon de l'utiliser:
DecimalFormat df = new DecimalFormat();
df.setMaximumFractionDigits(2);
System.out.println(df.format(decimalNumber));
Une autre consiste à le construire en utilisant le format #.##
.
Je trouve toutes les options de formatage moins lisibles que d’appeler les méthodes de formatage, mais c’est une question de préférence.
Je suggérerais d'utiliser String.format () si vous avez besoin de la valeur en tant que String
dans votre code.
Par exemple, vous pouvez utiliser String.format()
de la manière suivante:
float myFloat = 2.001f;
String formattedString = String.format("%.02f", myFloat);
double d = 1.234567;
DecimalFormat df = new DecimalFormat("#.##");
System.out.print(df.format(d));
float f = 102.236569f;
DecimalFormat decimalFormat = new DecimalFormat("#.##");
float twoDigitsF = Float.valueOf(decimalFormat.format(f)); // output is 102.24
Beaucoup de gens ont mentionné DecimalFormat
. Mais vous pouvez aussi utiliser printf
si vous avez une version récente de Java:
System.out.printf("%1.2f", 3.14159D);
Consultez la documentation du formateur pour plus d'informations sur la chaîne de format printf .
Une astuce simple consiste à générer une version plus courte de votre variable en la multipliant par exemple. 100
, en l’arrondissant et en le divisant à nouveau par 100.0
. De cette façon, vous générez une variable, avec 2 décimales :
double new_variable = Math.round(old_variable*100) / 100.0;
Ce "truc pas cher" a toujours été suffisant pour moi et fonctionne dans toutes les langues (je ne suis pas Java, je viens de l'apprendre).
float floatValue=22.34555f;
System.out.print(String.format("%.2f", floatValue));
La sortie est 22,35 . Si vous avez besoin de 3 décimales, remplacez-le par "% .3f".
Regardez DecimalFormat
Voici un exemple tiré du tutoriel:
DecimalFormat myFormatter = new DecimalFormat(pattern);
String output = myFormatter.format(value);
System.out.println(value + " " + pattern + " " + output);
Si vous choisissez un modèle tel que "###. ##", vous obtiendrez deux décimales et je pense que les valeurs sont arrondies. Vous voudrez regarder le lien pour obtenir le format exact que vous voulez (par exemple, si vous voulez des zéros de fin)
OK - str pour flotter.
package test;
import Java.text.DecimalFormat;
public class TestPtz {
public static void main(String[] args) {
String preset0 = "0.09,0.20,0.09,0.07";
String[] thisto = preset0.split(",");
float a = (Float.valueOf(thisto[0])).floatValue();
System.out.println("[Original]: " + a);
a = (float) (a + 0.01);
// Part 1 - for display / debug
System.out.printf("[Local]: %.2f \n", a);
// Part 2 - when value requires to be send as it is
DecimalFormat df = new DecimalFormat();
df.setMinimumFractionDigits(2);
df.setMaximumFractionDigits(2);
System.out.println("[Remote]: " + df.format(a));
}
}
Sortie:
run:
[Original]: 0.09
[Local]: 0.10
[Remote]: 0.10
BUILD SUCCESSFUL (total time: 0 seconds)
petit programme simple de démonstration:
import Java.io.*;
import Java.util.Scanner;
public class twovalues {
public static void main(String args[]) {
float a,b;
Scanner sc=new Scanner(System.in);
System.out.println("Enter Values For Calculation");
a=sc.nextFloat();
b=sc.nextFloat();
float c=a/b;
System.out.printf("%.2f",c);
}
}
Vous trouverez ci-dessous un code indiquant comment afficher une sortie de données flottantes avec 2 décimales en Java:
float ratingValue = 52.98929821f;
DecimalFormat decimalFormat = new DecimalFormat("#.##");
float twoDigitsFR = Float.valueOf(decimalFormat.format(ratingValue)); // output is 52.98
Un problème qui m'a eu pendant une heure ou plus, sur DecimalFormat
- Il gère différemment les entrées double et float Même le changement de RoundingMode n'a pas aidé. Je ne suis pas un expert, mais j'ai pensé que cela pourrait aider quelqu'un comme moi. Nous avons fini par utiliser Math.round
à la place. Voir ci-dessous:
DecimalFormat df = new DecimalFormat("#.##");
double d = 0.7750;
System.out.println(" Double 0.7750 -> " +Double.valueOf(df.format(d)));
float f = 0.7750f;
System.out.println(" Float 0.7750f -> "+Float.valueOf(df.format(f)));
// change the RoundingMode
df.setRoundingMode(RoundingMode.HALF_UP);
System.out.println(" Rounding Up Double 0.7750 -> " +Double.valueOf(df.format(d)));
System.out.println(" Rounding Up Float 0.7750f -> " +Float.valueOf(df.format(f)));
Sortie:
Double 0.7750 -> 0.78
Float 0.7750f -> 0.77
Rounding Up Double 0.7750 -> 0.78
Rounding Up Float 0.7750f -> 0.77
Il suffit de faire String str = System.out.printf("%.2f", val).replace(",", ".");
si vous voulez vous assurer que, indépendamment du paramètre régional de l'utilisateur, vous obtiendrez/afficherez toujours un "." comme séparateur décimal. Ceci est indispensable si vous ne voulez pas que votre programme plante, si vous effectuez ultérieurement une conversion telle que float f = Float.parseFloat(str);
Essaye ça:-
private static String getDecimalFormat(double value) {
String getValue = String.valueOf(value).split("[.]")[1];
if (getValue.length() == 1) {
return String.valueOf(value).split("[.]")[0] +
"."+ getValue.substring(0, 1) +
String.format("%0"+1+"d", 0);
} else {
return String.valueOf(value).split("[.]")[0]
+"." + getValue.substring(0, 2);
}
}