Afficher un double avec 0 (s'il est entier) ou 2 décimales

Résolu
sylent84 Messages postés 3 Statut Membre -  
KX Messages postés 19031 Statut Modérateur -
Bonjour,

Je souhaiterai afficher des nombres de type 'Double' avec :
- 0 décimales s'il est égal à un entier (exemples: 200/200.0/200.00/...)
- 2 décimales s'il est différent d'un nombre entier (exemple : 200.3 donne 200.30)

J'ai bien fait un DoubleConverter avec un DecimalFormat :

final DecimalFormat decimalFormat = new DecimalFormat();
			final DecimalFormatSymbols s = decimalFormat.getDecimalFormatSymbols();
			s.setGroupingSeparator(' ');
			s.setDecimalSeparator(',');

			decimalFormat.setMinimumFractionDigits(0);
			decimalFormat.setMaximumFractionDigits(2);
			decimalFormat.setDecimalFormatSymbols(s);
			return decimalFormat.format(value);


Mais je voudrais que, si l'utilisateur saisi un chiffre avec une seule décimale, qu'il m'en affiche 2 par exemple :
-saisie de 200.30 cela m'affiche 200,3 alors que je voudrais 200,30
-saisie de 200.3 cela m'affiche 200,3 alors que je voudrais 200,30

Merci d'avance pour tous vos conseils.

3 réponses

  1. juliencolin54 Messages postés 238 Statut Membre 55
     
    Bonjour,

    Tu peux convertir ton double en String, puis dans un try/ catch faire un parseInt de ta String.
    Passer dans le catch
    <=> ta chaîne t'es pas un int
    <=> ta chaîne peut-être un double

    Pour choisir le nombre de chiffres après la virgule, si je me rapelle bien,
    les doubles ont la méthode
     setMaximumFractionDigits(int nb_chiffre_apres_la_vigule);
     
    0
  2. sylent84 Messages postés 3 Statut Membre
     
    Merci de ta réponse mais je viens de trouver quelques secondes avant en fait :
    final DecimalFormat decimalFormat = new DecimalFormat();
    			final DecimalFormatSymbols s = decimalFormat.getDecimalFormatSymbols();
    			s.setGroupingSeparator(' ');
    			s.setDecimalSeparator(',');
    			decimalFormat.setMinimumFractionDigits(0);
    			decimalFormat.setMaximumFractionDigits(2);
    			decimalFormat.setDecimalFormatSymbols(s);
    			String nombre=decimalFormat.format(value);
    			if(nombre.indexOf(",")!=-1 && nombre.length()==nombre.indexOf(",")+2){
    				return nombre.concat("0");
    			}else{
    				return nombre;
    			}
    0
  3. KX Messages postés 19031 Statut Modérateur 3 020
     
    Il y a encore plus simple :
    System.out.printf("%.2f",200.3); // 200.30
    Ou en version String :
    String str = String.format("%.2f",200.3); // 200.30
    0
    1. sylent84 Messages postés 3 Statut Membre
       
      Ça ne m'aurait pas permis d'afficher 200 lorsque l'utilisateur saisit 200.0 ou 200.00
      0
    2. KX Messages postés 19031 Statut Modérateur 3 020
       
      Au temps pour moi, j'avais mal compris, cependant ça pourras toujours être utile de savoir que ça existe, c'est très utile, voici comment on pourrait faire :

      public static String format(double d)
      {
          String s = String.format(Locale.FRENCH, "%,.2f", d);
          int n = s.indexOf(",");
          
          if (n != -1 && s.substring(n).equals(",00"))
              return s.substring(0, n);
          else
              return s;
      }
      
      public static void main(String[] args)
      {
          System.out.println(format(1.23));       // "1,23"
          System.out.println(format(100000));     // "100 000"
          System.out.println(format(12345.6789)); // "12 345,68"
      }
      0