poniedziałek, 22 kwietnia 2013

Zaokrąglanie liczb w Javie przy użyciu DecimalFormat

Zawsze zapominam :-)
double kilobytes = 123.45678;
DecimalFormat df = new DecimalFormat("###.##");
System.out.println("kilobytes (DecimalFormat) : " + df.format(kilobytes));
Tylko żebyś się nie zdziwił, że w liczbie jest przecinek zamiast oczekiwanej kropki jak podałem w formacie "###.##". Otóż Java nie interpretuje tego dosłownie. Kropka jest tutaj znakiem odstępu dziesiętnego. W przypadku lokalizacji polskiej naszym naturalnym znakiem jest przecinek i stąd ta różnica.
Aby zamienić w pojedynczym miejscu przecinek na kropkę można użyć łaty:
df.format(kilobytes).replace(",", ".");
Aby zaś zastosować to na stałe użyj lokalizacji, dla której właściwym znakiem jest kropka. Na przykład amerykańskiej.
Można tymczasowo:
System.out.println(String.format(Locale.US, "%f", 3.141592));
a można na stałe:
Locale.setDefault(Locale.US);

Poprzedzanie i kończenie zerami

W którejś aplikacji potrzebowałem wiodących i kończących zer. Aplikacja współpracująca potrzebowała takiego formatu "00.000":
liczba wymagany format
1 01.000
2,03 02.030
2,45 02.450
14,035 14.035

Zastosowałem więc takie rozwiązanie:
Float x = 2.35f;
DecimalFormat df = new DecimalFormat("00.000");
System.out.println(df.format(x).replace(",", "."));
na wyjściu otrzymałem:
02.350

1 komentarz:

  1. Bardzo przydatna rzecz, bo po co komu tyle miejsc po przecinku ;)

    OdpowiedzUsuń