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

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.


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

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

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

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".



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


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.


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)


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

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)

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

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

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


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


 }

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.