Non credo ci sia un modo di farlo solo con DecimalFormat
, ma questo one-liner si prende cura del problema:
formattedValue = formattedValue.replaceAll("^-(?=0(.0*)?$)", "");
Rimuove (sostituisce con ""
) il segno meno se è seguito da 0-n caratteri di "0.00000..."
, quindi questo funzionerà per qualsiasi risultato simile come ad esempio "-0"
, "-0."
o "-0.000000000"
Ecco alcuni codice di prova:
public static void main(String[] args) {
System.out.println(format(-0.023));
System.out.println(format(12.123));
System.out.println(format(-12.345));
System.out.println(format(-0.123));
System.out.println(format(-1.777));
}
public static String format(double number) {
DecimalFormat df = new DecimalFormat("#,##0.0");
df.setRoundingMode(RoundingMode.HALF_UP);
String formattedValue = df.format(number);
formattedValue = formattedValue.replaceAll("^-(?=0(.0*)?$)", "");
return formattedValue;
}
uscita (come previsto):
0.0
12.1
-12.3
-0.1
-1.8
Viene visualizzato un errore: 'Impossibile formattare l'oggetto dato come numero'. Dovresti usare il valore '-0.023' non la stringa' "-0.023" ' – alfasin