2012-10-27 12 views
5

Używam NumberFormat.getCurrencyInstance().format(amount) do formatowania waluty z BigDecimal na ciąg znaków. Działa to zgodnie z oczekiwaniami, ponieważ naszym głównym celem jest rynek holenderski, a domyślne formatowanie holenderskie jest dziwne.Ustawienia lokalne Java zastępują określone ustawienia narodowe

Pozwolę sobie wyjaśnić, że podczas formatowania -125 otrzymuję "€ 125-" dla języka holenderskiego (oczekiwano "- 125 EUR"). Uk działa zgodnie z oczekiwaniami, podając "- £ 125.50".

Mogę sprawdzić, czy lokalizacja jest holenderska, a następnie podać wzór za każdym razem, gdy chcę sformatować miejsca dziesiętne. Ale wolałbym rozwiązanie, które zastępuje holenderskie ustawienia formatowania. Pomyślałem o czymś podobnym:

Locale nlLocale = new Locale("nl", "NL"); 
NumberFormat.getCurrencyInstance(new Locale("nl", "NL")).setFormatPattern("€ #"); 

Tak, że za każdym razem, gdy używam ustawień regionalnych podczas formatowania, otrzymuję niestandardowy format. Czy istnieje podobne rozwiązanie?

+0

Dlaczego chcesz zmienić formatowanie holenderskiej? Czy nie pomylisz ich, wybierając niestandardową opcję formatowania (dla holenderskiego). – Dunes

+0

Używam [zamknij] (http://www.java2s.com/Open-Source/Android/android-core/platform-libcore/libcore/java/text/OldNumberFormatTest.java.htm)/[similair] (http://www.java2s.com/Tutorial/Java/0040__Data-Type/Helperclassforformatnumberandcurrency.htm) klasy dla Swing GUI, możesz być w stanie stworzyć własną macierz dla liczby jako frakcji zbyt – mKorbel

+0

@Dunes użytkownicy oczekują innego formatu niż java zapewnia holenderski (symbol minus powinien znajdować się przed numerem, a nie za nim). mKorbel, myślałem o zawinięciu każdego wezwania do sformatowania, to będzie moja ostatnia deska ratunku, ale mam nadzieję, że mogę po prostu przesłonić niektóre ustawienia dla określonych lokalizacji – Rob

Odpowiedz

2

Pomijając kwestię, czy ten konkretny format jest „poprawna”, czy nie, tak aby zmienić instancję walut dla „nl” Locale jest wdrożenie i skonfiguruj niestandardową LocaleServiceProvider dla usługi formatu liczbowego. (Klasa dostawca musi podklasy NumberFormatProvider, ale javadoc nadklasą wyjaśnia, w jaki sposób skonfigurować dostawcę.)

Dostawca musi powrócić niestandardowego NumberFormat instancji w konkretnym przypadku jesteś zaniepokojony, ale (prawdopodobnie) przenosić do domyślnego dostawcy w innych przypadkach.

+0

Dzięki, spróbuję to JAK NAJSZYBCIEJ! – Rob

0

Można skonstruować własny, dostosowany format. Rzucić okiem na poniższy link:

http://docs.oracle.com/javase/tutorial/i18n/format/decimalFormat.html

+0

To nie zadziała, ponieważ chcę nadpisać lokalny wzór (więc nie będę Muszę dostarczyć niestandardowy wzór za każdym razem, gdy potrzebuję sformatować walutę), a nie tylko dostarczać niestandardowy wzór za każdym razem, gdy formatuję – Rob

0

Użyj metody applyPattern:

final DecimalFormat df = (DecimalFormat)NumberFormat.getCurrencyInstance(locale); 
df.applyPattern("¤#,##0.##"); 
+0

Podczas korzystania z "getCurrencyInstance" tworzysz nową instancję formatyzatora. Dlatego będziesz musiał zastosować określony wzorzec za każdym razem, gdy chcesz go sformatować. Chcę ustawić format jeden raz i zastosować go do wszystkich formaterów zwracanych przez getCurrencyInstance – Rob

Powiązane problemy