Nie sądzę, istnieje sposób to zrobić tylko z DecimalFormat
, ale ta jedna wkładka dba o problemie:
formattedValue = formattedValue.replaceAll("^-(?=0(.0*)?$)", "");
Usuwa (zamienia z ""
) znak minus, jeśli po nim następuje 0-n znaków z "0.00000..."
, więc będzie działać dla dowolnego podobnego wyniku takich jak "-0"
, "-0."
lub "-0.000000000"
Oto niektóre kodu testu:
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;
}
wyjścia (zgodnie z oczekiwaniami):
0.0
12.1
-12.3
-0.1
-1.8
Pojawia się błąd: "Nie można sformatować danego obiektu jako liczby". Powinieneś użyć wartości '-0.023', a nie ciągu' "-0.023" ' – alfasin