web-dev-qa-db-fra.com

Java: utilisez DecimalFormat pour formater les doubles et les entiers, mais conservez les entiers sans séparateur décimal

J'essaie de formater certains nombres dans un programme Java. Les nombres seront à la fois des doubles et des entiers. Lors de la manipulation des doubles, je veux garder seulement deux décimales mais lors de la manipulation des entiers, je veux le programme pour les garder inchangés. En d'autres termes:

Doubles - Entrée

14.0184849945

Doubles - Sortie

14.01

Entiers - Entrée

13

Entiers - Sortie

13 (not 13.00)

Existe-t-il un moyen de l'implémenter dans l'instance idem DecimalFormat? Jusqu'à présent, mon code est le suivant:

DecimalFormat df = new DecimalFormat("#,###,##0.00");
DecimalFormatSymbols otherSymbols = new   DecimalFormatSymbols(Locale.ENGLISH);
otherSymbols.setDecimalSeparator('.');
otherSymbols.setGroupingSeparator(',');
df.setDecimalFormatSymbols(otherSymbols);
16
Lefteris008

Vous pouvez simplement mettre le minimumFractionDigits à 0. Comme ceci:

public class Test {

    public static void main(String[] args) {
        System.out.println(format(14.0184849945)); // prints '14.01'
        System.out.println(format(13)); // prints '13'
        System.out.println(format(3.5)); // prints '3.5'
        System.out.println(format(3.138136)); // prints '3.13'
    }

    public static String format(Number n) {
        NumberFormat format = DecimalFormat.getInstance();
        format.setRoundingMode(RoundingMode.FLOOR);
        format.setMinimumFractionDigits(0);
        format.setMaximumFractionDigits(2);
        return format.format(n);
    }

}
28
Rodrigo Sasaki

Pourriez-vous ne pas simplement envelopper cela dans un appel Utility. Par exemple

public class MyFormatter {

  private static DecimalFormat df;
  static {
    df = new DecimalFormat("#,###,##0.00");
    DecimalFormatSymbols otherSymbols = new   DecimalFormatSymbols(Locale.ENGLISH);
    otherSymbols.setDecimalSeparator('.');
    otherSymbols.setGroupingSeparator(',');
    df.setDecimalFormatSymbols(otherSymbols);
  }

  public static <T extends Number> String format(T number) {
     if (Integer.isAssignableFrom(number.getClass())
       return number.toString();

     return df.format(number);
  }
}

Vous pouvez alors simplement faire des choses comme: MyFormatter.format(int) etc.

4
Jeremy Unruh