2011-12-21 16 views
11

dane wejściowe wygląda tak, jak 8.7000000 i chcę sformatować go tak, aby wyglądał tak, jak 8.70 EUR. uznałem za pomocą klasy DecimalFormat:Jak używać formatu DecimalFormat do formatowania pieniędzy?

Double number = Double.valueOf(text); 

    DecimalFormat dec = new DecimalFormat("#.## EUR"); 
    String credits = dec.format(number); 

    TextView tt = (TextView) findViewById(R.id.creditsView); 
    tt.setText(credits); 

wynik jest 8,7 EUR. Jak mogę stwierdzić, że formatyzator ma dwie cyfry po ,?

+3

W ogóle, nie należy używać binarne typy zmiennoprzecinkowe do przechowywania wartości waluty tak. Użyj BigDecimal lub po prostu skaluj liczbę całkowitą (np. Wpisz liczbę całkowitą centów). –

Odpowiedz

23

Warto również podkreślić tutaj punkt Jon Skeeta na temat używania liczb całkowitych do przechowywania wszystkich walut - nie chcemy mieć do czynienia z błędami zmiennoprzecinkowymi w pieniądzach.

korzystanie 0,00 zamiast ## -. 0 oznacza cyfrę, # oznacza cyfrę (jednak ukryć, jeśli to równa zeru)

Double number = Double.valueOf(text); 

DecimalFormat dec = new DecimalFormat("#.00 EUR"); 
String credits = dec.format(number); 

TextView tt = (TextView) findViewById(R.id.creditsView); 
tt.setText(credits); 

lub

użytku setMinimumFractionDigits?

Double number = Double.valueOf(text); 

    DecimalFormat dec = new DecimalFormat("#.## EUR"); 
    dec.setMinimumFractionDigits(2); 
    String credits = dec.format(number); 

    TextView tt = (TextView) findViewById(R.id.creditsView); 
    tt.setText(credits); 
+0

idealne, dziękuję! –

+0

Jak wyglądałby format, gdybym miał 0.0600 jako dane wejściowe i chciałby uzyskać 6,0 ct jako dane wyjściowe? –

+0

Musiałbyś to zrobić w kodzie, obawiam się - format dziesiętny nie poradziłby sobie ze zmianą jednostki. Chyba mam warunek: 'if (val < 1 && val > 0) {// pomnóż przez 100 i użyj formatera ct} else {// użyj formatu EURO} –

4

Znalazłem ładne rozwiązanie w ten link poniżej

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

w skrócie do reprezentowania waluty jak +92323345465,30 jak 92,323,345,465.30 wystarczy użyć ###, ###, ###, # ##. 00

Oznacza to, że gdy użyjesz "0", wtedy "0" zostanie zastąpione przez inną cyfrę, lub jeśli nie ma cyfry, aby ją zastąpić, to wyświetli się! Ale czy używasz "#", a jeśli nie ma numeru, który mógłby zastąpić "#", to miejsce będzie puste.

Pamiętaj, że możesz nawet dodać własne symbole jak $, etc przed formatowaniem lub nawet po ciąg formatowania

2

Myślę, że dobrym rozwiązaniem byłoby to aproach:

Korzystanie #,###.00 z doprowadzić do wartości 0.50 będzie wyświetlany tak:

$, 50

jednak jeśli używasz #,##0.00 wynik dla tej samej wartości będzie:

$ 0,50

Powiązane problemy