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