Comment imprimer un flottant avec 2 décimales en Java?

Réponses:

266

Vous pouvez utiliser la printfméthode, comme ceci:

System.out.printf("%.2f", val);

En bref, la %.2fsyntaxe 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écimal
  • o: entier octal
  • e: virgule flottante en notation scientifique
Anthony Forloney
la source
15
Veuillez faire attention car String.format dépend de votre configuration locale actuelle, vous ne pouvez pas obtenir de point comme séparateur. Préférez utiliserString.format(java.util.Locale.US,"%.2f", val);
Gomino
2
@gomino Pourquoi pas Locale.FRANCE?
erickson
4
@gomino Exactement. Alors pourquoi mettriez-vous des points en chiffres pour les utilisateurs français?
erickson
1
J'ai ajouté ce commentaire en guise de rappel pour avertir les gens qui s'attendent à toujours avoir un point comme séparateur.
Gomino
7
@gomino Cela a du sens, mais je pense que "préférer" le codage en dur Locale.USva 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.
erickson
185

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.

Bozho
la source
11
Que s'est-il passé avec la System.out.printf("%.2f", value)syntaxe? Est-ce toujours là?
Anthony Forloney
6
c'est. c'est toujours une option - vous pouvez annuler la suppression de votre réponse;)
Bozho
On dirait que c'est mon option, car je ne sais pas encore comment utiliser DecimalFormat :) Merci!
via_point
Je n'ai pas fait un travail approfondi sur Java depuis un moment, et quand j'ai continué à voir des DecimalFormatréponses, j'ai immédiatement pensé que j'avais tort, mais merci d'avoir clarifié cela.
Anthony Forloney
9
ajouter df.setMinimumFractionDigits(2);pour forcer deux chiffres
Terel
89

Je suggérerais d'utiliser String.format () si vous avez besoin de la valeur en tant que Stringdans votre code.

Par exemple, vous pouvez utiliser String.format()de la manière suivante:

float myFloat = 2.001f;

String formattedString = String.format("%.02f", myFloat);
John P.
la source
14
"% .02f" et "% .2f" c'est la même chose
Borzh
40
double d = 1.234567;
DecimalFormat df = new DecimalFormat("#.##");
System.out.print(df.format(d));
Kevin Sylvestre
la source
5
Bonjour Kevin, si vous entrez 10.0000, je reçois seulement 10. Si je veux afficher 10,00, comment puis-je faire?
Mdhar9e
2
@ Mdhar9e useDecimalFormat df = new DecimalFormat("0.00");
K.Sopheak
17
float f = 102.236569f; 
DecimalFormat decimalFormat = new DecimalFormat("#.##");
float twoDigitsF = Float.valueOf(decimalFormat.format(f)); // output is 102.24
Phan Van Linh
la source
4
Selon les paramètres régionaux, vous pouvez obtenir une virgule. Si vous voulez un séparateur de points, utilisez ceci: DecimalFormat ("#. ##", DecimalFormatSymbols (Locale.US))
DPM
10
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".

Aldin Philo
la source
9

Une astuce simple consiste à générer une version plus courte de votre variable en la multipliant par exemple 100en l'arrondissant et en la divisant à 100.0nouveau. 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).

Birk
la source
2
C'est faux, de nombreux nombres répéteront des nombres dans la représentation flottante après avoir divisé par 100. Donc pas deux décimales.
mat
9

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.

baie
la source
2
Il n'affiche pas 0 avant le point. Il doit être DecimalFormat df = new DecimalFormat ("0,00");
Ridhuvarshan le
Pour sûr! DecimalFormat ("0.00") fonctionnera aussi! Super endroit.
Baie le
6

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)

Uri
la source
5

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
Keshav Gera
la source
3

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)

la source
2

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.roundplace. 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
user2984447
la source
1

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);
    }
}
Pavan vadrevu
la source
1

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);

Paul Efford
la source
0

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);
      }


 }
Logiciel Nathani
la source
Pour plus de détails: - makecodesimpleandeasy.blogspot.com/2019/08/…
Nathani Software