web-dev-qa-db-fra.com

Comment afficher une sortie de données flottantes avec 2 décimales en Java?

Puis-je le faire avec System.out.print?

150
via_point

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écimal
  • o: entier octal
  • e: virgule flottante en notation scientifique
197
Anthony Forloney

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 toutes les options de formatage moins lisibles que d’appeler les méthodes de formatage, mais c’est une question de préférence.

150
Bozho

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);
72
John P.
double d = 1.234567;
DecimalFormat df = new DecimalFormat("#.##");
System.out.print(df.format(d));
35
Kevin Sylvestre
float f = 102.236569f; 
DecimalFormat decimalFormat = new DecimalFormat("#.##");
float twoDigitsF = Float.valueOf(decimalFormat.format(f)); // output is 102.24
15
Linh

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

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

5
Aldin Philo

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)

5
Uri

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)
3
YumYumYum

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

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
0
Keshav Gera

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
0
user2984447

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

0
Paul Efford

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


 }
0
Nathani Software