Chcę przekonwertować liczbę całkowitą 35634646 na liczbę tysięcy, więc powinna wynosić 35,634,646.
Jaki byłby najszybszy sposób na zrobienie tego?
System.out.println(NumberFormat.getNumberInstance(Locale.US).format(35634646));
Output: 35,634,646
import java.text.NumberFormat;
.,
, jednak.
zamiast tego są też regiony używające do grupowania. Jednym słowem, zakodowanie ustawień regionalnych na stałe jest uważane za złą praktykę.Locale.getCurrent()
jest rozwiązaniemPytasz o najszybsze, ale może masz na myśli „najlepsze”, „poprawne” lub „typowe”?
Prosisz także o przecinki, aby wskazać tysiące, ale może masz na myśli „w normalnej, czytelnej dla człowieka formie, zgodnie z lokalnymi zwyczajami Twojego użytkownika”?
Robisz to tak:
int i = 35634646; String s = NumberFormat.getIntegerInstance().format(i);
Amerykanie otrzymają „35,634,646”
Niemcy otrzymają „35.634.646”
Niemcy otrzymają „35'634'646”
źródło
int bigNumber = 1234567; String formattedNumber = String.format("%,d", bigNumber);
źródło
Liczby całkowite:
int value = 100000; String.format("%,d", value); // outputs 100,000
Debel:
double value = 21403.3144d; String.format("%,.2f", value); // outputs 21,403.31
String.format jest dość potężny.
- Edytowane na podstawie opinii psuzzi .
źródło
String.format
. Zaczyna się odreturn new Formatter(l) ...
itd. Więc argument od śmieciarza nie jest tak silny, jak się wydaje.int value = 35634646; DecimalFormat myFormatter = new DecimalFormat("#,###"); String output = myFormatter.format(value); System.out.println(output);
Wynik:
35,634,646
źródło
#,###
, jeśli chcesz formatowania w stylu europejskim, możesz użyć#,##,###
.,
.Pozostałe odpowiedzi są poprawne, jednak przed użyciem dokładnie sprawdź ustawienia regionalne
"%,d"
:Locale.setDefault(Locale.US); int bigNumber = 35634646; String formattedNumber = String.format("%,d", bigNumber); System.out.println(formattedNumber); Locale.setDefault(new Locale("pl", "PL")); formattedNumber = String.format("%,d", bigNumber); System.out.println(formattedNumber);
Wynik:
35,634,646 35 634 646
źródło
Użyj specyfikatora
%d
formatu z przecinkiem:%,d
To zdecydowanie najłatwiejszy sposób.
źródło
To rozwiązanie zadziałało dla mnie:
NumberFormat.getNumberInstance(Locale.US).format(Integer.valueOf("String Your Number"));
źródło
użyj rozszerzenia
import java.text.NumberFormat val Int.commaString: String get() = NumberFormat.getInstance().format(this) val String.commaString: String get() = NumberFormat.getNumberInstance().format(this.toDouble()) val Long.commaString: String get() = NumberFormat.getInstance().format(this) val Double.commaString: String get() = NumberFormat.getInstance().format(this)
wynik
1234.commaString => 1,234 "1234.456".commaString => 1,234.456 1234567890123456789.commaString => 1,234,567,890,123,456,789 1234.456.commaString => 1,234.456
źródło
Jeśli to samo trzeba zrobić na stronie JSP, użyj:
<fmt:formatNumber pattern="#,##0" value="${yourlist.yourintvalue}" var="formattedVariable" /> <c:out value="${formattedVariable}"></c:out>
oczywiście dla wielu wartości użyj:
<c:forEach items="${yourlist}" var="yourlist"> <fmt:formatNumber pattern="#,##0" value="${yourlist.yourintvalue}" var="formattedVariable" /> <c:out value="${formattedVariable}"></c:out> </c:forEach>
źródło
tutaj jest rozwiązanie dla tych z Was, którzy nie mają dostępu do „numberformat” ani „String.format” (używając ograniczonej wersji Java wewnątrz frameworka). Mam nadzieję, że to przydatne.
number= 123456789; thousandsSeparator=","; myNumberString=number.toString(); numberLength=myNumberString.length; howManySeparators=Math.floor((numberLength-1)/3) formattedString=myNumberString.substring(0,numberLength-(howManySeparators*3)) while (howManySeparators>0) { formattedString=formattedString+thousandsSeparator+myNumberString.substring(numberLength-(howManySeparators*3),numberLength-((howManySeparators-1)*3)); howManySeparators=howManySeparators-1; } formattedString
źródło
nie możesz użyć
System.out.printf("%n%,d",int name);
Przecinek w tagu
printf
powinien dodać przecinki do%d
inter.Nie jest to pozytywne, ale działa na mnie.
źródło
Najpierw musisz dołączyć tagi JSTL: -
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
na początku strony
źródło