2010-12-29 19 views
25

Mieszkam w Belgii. I ogólnie, w matematyce, my zapisujemy nasze miejsca po przecinku z przecinkiem takim jak to: 3,141592
I to jest także wynik, gdy I format pływający.Java: Float Formatowanie zależy od ustawień regionalnych

System.out.println(String.format("%f", 3.141592)); 

Tak, . zastąpiono , tak: 3,141592. Więc zawsze, gdy potrzebuję punktu, muszę dodać coś takiego: String.format("%f", 3.14).replace(',','.');

Pytanie brzmi: czy istnieje sposób na zmianę ustawień regionalnych, które powodują, że każdy formatator w języku Java używa punktu zamiast przecinka?

Dzięki


System.out.println(Locale.getDefault()); 

drukuje

nl_BE 
+0

Czy chcesz zmienić formatowanie liczb, czy też wszystko inne może się zmienić, na przykład na US locale? – Thilo

+0

Interesujące Chcę to zobaczyć, jaka jest Twoja domyślnaLocale? –

+0

@Thilo: Jeśli jest to możliwe: tylko formatowanie liczb. –

Odpowiedz

42

Spróbuj użyć ustawienia String.format(Locale.US, "%f", floatValue) w celu ustawienia ustawień regionalnych używanych podczas formatowania.

9

Proste rozwiązanie, ale będzie szeroko idące całej lokalizacji, byłoby ustawić narodowych systemu do USA lub Wielkiej Brytanii. Przykład.

Locale.setDefault(Locale.US); 

Ponieważ pytanie zostało zmienione, po prostu określ lokalnie przy użyciu metody drukowania.

System.out.println(String.format(Locale.US, "%f", 3.141592)); 
+2

Problem polega na tym, że masz przecinek jako separator tysięcy, a dla użytkowników francuskich lub belgijskich staje się on bardzo zagmatwany. Nasz TouhsandsSeparator to spacja, a przecinek to nasz separator dziesiętny. – LaGrandMere

+3

Można również użyć 'String.format (Locale.US,"% f ", floatValue)' tylko do ustawienia ustawień narodowych używanych podczas formatowania. – rodion

+0

@rodion: Czy możesz dodać swoją odpowiedź jako prawdziwą odpowiedź? –

1

Do formatowania liczb, naprawdę nie powinieneś polegać na toString(). Użyj String.format(), metod fabrycznych w NumberFormat lub DecimalFormat, które pozwalają kontrolować sposób formatowania liczb (pierwsze dwa, wybierając lokalizację) bez polegania na niektórych ustawieniach globalnych.

+3

toString jest niezawodnie niezależny od ustawień regionalnych. – Thilo

7

Może to być przydatne, aby spojrzeć na http://download.oracle.com/javase/6/docs/api/java/text/DecimalFormat.html który zawiera szereg opcji dla precyzyjnej produkcji strun przy użyciu Locale gdzie konieczne

DecimalFormat to konkretny podklasa z numberFormat że formatuje przecinku liczb. Ma wiele funkcji: Zaprojektowany, aby umożliwić analizowanie i formatowanie liczb w dowolnym ustawieniu narodowym, , w tym obsługę znaków Western, Arabski, i Indykować cyfry. Obsługuje również różne rodzaje liczb, w tym liczby całkowite (123), numery stałoprzecinkowe (123.4), notację naukową (1,23E4), wartości procentowe (12%) i waluty kwoty (123 USD). Wszystkie te mogą być zlokalizowane.

Często przydatne jest przesyłanie danych wejściowych i wyjściowych za pomocą niestandardowych procedur. Oto jeden z biblioteki JAMA (http://math.nist.gov/javanumerics/jama/)

public void print (PrintWriter output, int w, int d) { 
     DecimalFormat format = new DecimalFormat(); 
     format.setDecimalFormatSymbols(new DecimalFormatSymbols(Locale.US)); 
     format.setMinimumIntegerDigits(1); 
     format.setMaximumFractionDigits(d); 
     format.setMinimumFractionDigits(d); 
     format.setGroupingUsed(false); 
     print(output,format,w+2); 
    } 

Za pomocą tego można mieć pewność, że przyszłe problemy i ulepszenia mogą być adresowane

Powiązane problemy