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

Résolu/Fermé
sylent84 Messages postés 3 Date d'inscription vendredi 9 août 2013 Statut Membre Dernière intervention 10 août 2013 - 9 août 2013 à 08:53
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 - 10 août 2013 à 12:05
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.

A voir également:

3 réponses

juliencolin54 Messages postés 217 Date d'inscription dimanche 22 juillet 2012 Statut Membre Dernière intervention 1 octobre 2013 55
9 août 2013 à 11:42
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
sylent84 Messages postés 3 Date d'inscription vendredi 9 août 2013 Statut Membre Dernière intervention 10 août 2013
9 août 2013 à 11:55
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
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
9 août 2013 à 19:06
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
sylent84 Messages postés 3 Date d'inscription vendredi 9 août 2013 Statut Membre Dernière intervention 10 août 2013
10 août 2013 à 11:26
Ça ne m'aurait pas permis d'afficher 200 lorsque l'utilisateur saisit 200.0 ou 200.00
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
10 août 2013 à 12:05
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