Puis-je le faire avec System.out.print
?
Réponses:
Vous pouvez utiliser la printf
méthode, comme ceci:
System.out.printf("%.2f", val);
En bref, la %.2f
syntaxe indique à Java de renvoyer votre variable ( val
) avec 2 décimales ( .2
) dans la représentation décimale d'un nombre à virgule flottante ( f
) à partir du début du spécificateur de format ( %
).
Vous pouvez également utiliser d'autres caractères de conversion f
:
d
: entier décimalo
: entier octale
: virgule flottante en notation scientifiqueLocale.FRANCE
?
Locale.US
va trop loin. Si vous avez besoin de coder en dur une locale "neutre" pour le pliage de casse, le rendu des nombres, etc., spécifiez Locale.ROOT
. Ce serait approprié pour le texte qui sera consommé par un autre programme, plutôt que rendu pour des utilisateurs humains. Pour le texte présenté à un utilisateur, respectez ses paramètres régionaux, qu'il l'ait spécifié explicitement ou que ce soit la valeur par défaut.
Vous 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 que toutes les options de formatage sont moins lisibles que d'appeler les méthodes de formatage, mais c'est une question de préférence.
System.out.printf("%.2f", value)
syntaxe? Est-ce toujours là?
DecimalFormat
réponses, j'ai immédiatement pensé que j'avais tort, mais merci d'avoir clarifié cela.
df.setMinimumFractionDigits(2);
pour forcer deux chiffres
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);
float f = 102.236569f;
DecimalFormat decimalFormat = new DecimalFormat("#.##");
float twoDigitsF = Float.valueOf(decimalFormat.format(f)); // output is 102.24
float floatValue=22.34555f;
System.out.print(String.format("%.2f", floatValue));
La sortie est de 22,35. Si vous avez besoin de 3 décimales, changez-le en "% .3f".
Beaucoup de gens l'ont mentionné DecimalFormat
. Mais vous pouvez également utiliser printf
si vous avez une version récente de Java:
System.out.printf("%1.2f", 3.14159D);
Consultez la documentation sur le 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 la divisant à 100.0
nouveau. 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 bon marché" a toujours été assez bon pour moi, et fonctionne dans n'importe quel langage (je ne suis pas une personne Java, je l'apprends juste).
Vous pouvez utiliser ces codes rapides ci-dessous qui se sont modifiés à la fin. Ajoutez le nombre de zéros auquel se réfère après le point
float y1 = 0.123456789;
DecimalFormat df = new DecimalFormat("#.00");
y1 = Float.valueOf(df.format(y1));
La variable y1 était égale à 0,123456789 auparavant. Après le code, il se transforme en 0,12 seulement.
Regardez DecimalFormat
Voici un exemple du tutoriel:
DecimalFormat myFormatter = new DecimalFormat(pattern);
String output = myFormatter.format(value);
System.out.println(value + " " + pattern + " " + output);
Si vous choisissez un modèle comme "###. ##", 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 à la fin)
Vous trouverez ci-dessous le code pour 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
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));
}
}
Production:
run:
[Original]: 0.09
[Local]: 0.10
[Remote]: 0.10
BUILD SUCCESSFUL (total time: 0 seconds)
Un problème qui m'a occupé pendant une heure ou plus, sur DecimalFormat
- Il gère différemment les entrées doubles et flottantes. 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. J'ai fini par utiliser à la Math.round
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)));
Production:
Double 0.7750 -> 0.78
Float 0.7750f -> 0.77
Rounding Up Double 0.7750 -> 0.78
Rounding Up Float 0.7750f -> 0.77
petit programme simple pour la 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);
}
}
Faites simplement String str = System.out.printf("%.2f", val).replace(",", ".");
si vous voulez vous assurer qu'indépendamment des paramètres régionaux de l'utilisateur, vous obtiendrez / affichera toujours un "." comme séparateur décimal. C'est un must si vous ne voulez pas faire planter votre programme si vous effectuez plus tard une sorte de conversion commefloat 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);
}
}
String.format(java.util.Locale.US,"%.2f", val);