Mam tę małą zwariowaną metodę, która konwertuje wartości BigDecimal na ładne i czytelne ciągi znaków.
private String formatBigDecimal(BigDecimal bd){
DecimalFormat df = new DecimalFormat();
df.setMinimumFractionDigits(3);
df.setMaximumFractionDigits(3);
df.setMinimumIntegerDigits(1);
df.setMaximumIntegerDigits(3);
df.setGroupingSize(20);
return df.format(bd);
}
Jednak generuje również tak zwany separator grupowania, ","
który sprawia, że wszystkie moje wartości wyglądają następująco:
xxx,xxx
Potrzebuję separatora, który będzie kropką lub kropką, a nie przecinkiem. Czy ktoś ma jakiś pomysł, jak dokonać tego małego wyczynu?
Przeczytałem to, a zwłaszcza to na śmierć, ale nie mogę znaleźć sposobu, aby to zrobić. Czy podchodzę do tego niewłaściwie? Czy istnieje o wiele bardziej elegancki sposób na zrobienie tego? Może nawet rozwiązanie uwzględniające różne lokalne reprezentacje liczb, ponieważ przecinek byłby idealny według standardów europejskich.
java
android
bigdecimal
decimal-point
decimalformat
MiraFayless
źródło
źródło
Odpowiedzi:
Możesz zmienić separator, ustawiając ustawienia regionalne lub używając DecimalFormatSymbols .
Jeśli chcesz, aby separator grupowania był punktem, możesz użyć europejskich ustawień regionalnych:
Alternatywnie można użyć klasy DecimalFormatSymbols do zmiany symboli pojawiających się w sformatowanych liczbach utworzonych metodą formatowania. Te symbole obejmują między innymi separator dziesiętny, separator grupowania, znak minus i znak procentu:
currentLocale można uzyskać z Locale.getDefault () tj .:
źródło
String formatString = "#,###,###,##0.00";
patrz docs.oracle.com/javase/7/docs/api/java/text/DecimalFormat.html w celu uzyskania składniLocale.UK
wróci,1,567.90
a nie 1.567,90NumberFormat.getNumberInstance()
może działać niezwykle wolno na niektórych urządzeniach z Androidem 7. Alternatywą jestString.format()
szybkie działanie. Zobacz stackoverflow.com/questions/2379221/java-currency-number-formatEuropa jest dość ogromna. Nie jestem pewien, czy używają tego samego formatu. Jednak ta lub ta odpowiedź będzie pomocna.
To znaczy użyj poprawnych ustawień regionalnych.
źródło
źródło
BigDecimal wydaje się nie respektować ustawień regionalnych.
Ustawienia słoweńskie powinny mieć przecinek dziesiętny. Chyba miałem dziwne nieporozumienia dotyczące liczb.
Zredagowałem część mojego komunikatu, który nie miał sensu, ponieważ okazał się być wynikiem błędu ludzkiego (zapomniałem zatwierdzić dane i patrzyłem na niewłaściwą rzecz).
To samo, co BigDecimal, można powiedzieć o dowolnej funkcji Java .toString (). Myślę, że pod pewnymi względami jest to dobre. Na przykład serializacja lub debugowanie. Istnieje unikalna reprezentacja ciągu.
Podobnie jak inne wspomniane przy użyciu formatowania działa OK. Wystarczy użyć formatererów, takich samych dla frontendu JSF, formaterery wykonują zadanie poprawnie i są świadomi ustawień regionalnych.
źródło
źródło