Otrzymuję int
6-cyfrową wartość. Chcę go wyświetlić jako String
z kropką dziesiętną (.) Na 2 cyfry od końca int
. Chciałem użyć, float
ale zasugerowano użycie String
dla lepszego wyświetlania (zamiast 1234.5
będzie 1234.50
). Dlatego potrzebuję funkcji, która przyjmie int
parametr as i zwróci odpowiednio sformatowany String
z przecinkiem dziesiętnym 2 cyfry od końca.
Mówić:
int j= 123456
Integer.toString(j);
//processing...
//output : 1234.56
String str = Integer.toString(j); //integer or string with white spaces<br/> str = new StringBuffer(str.trim()).insert(str.length()-2, ".").toString();
Odpowiedzi:
źródło
x = x.substring(0, x.length()-2) + "." + x.substring(x.length()-2);
Jak wspomniano w komentarzach, StringBuilder jest prawdopodobnie szybszą implementacją niż użycie StringBuffer . Jak wspomniano w dokumentacji Java:
Stosowanie :
Lub jeśli potrzebujesz synchronizacji, użyj StringBuffer z podobnym zastosowaniem:
źródło
java.lang.StringIndexOutOfBoundsException
(próbą dostępu do odniesienia, które nie istnieje).źródło
java.math.BigDecimal
ponieważ używaniedouble
może powodować błąd zaokrąglania . Jeśli prędkość jest bardziej wartościowa,double
to precyzja jest lepsza.W większości przypadków użycie
StringBuilder
(jak już udzielono) jest dobrym sposobem na zrobienie tego. Jeśli jednak liczy się wydajność, może to być dobra alternatywa.źródło
Używając ApacheCommons3 StringUtils, możesz również to zrobić
jest to w zasadzie konkatenacja podciągów, ale krótsza, jeśli nie masz nic przeciwko używaniu bibliotek lub już w zależności od StringUtils
źródło
Możesz użyć
Zgodnie z komentarzami, 12345 / 100.0 byłoby lepsze, podobnie jak użycie double zamiast float.
źródło
double
może być lepszym wyborem. liczba zmiennoprzecinkowa jest dokładna tylko do 6 cyfr.Jeśli używasz systemu, w którym zmiennoprzecinkowy jest drogi (np. Nie ma FPU) lub niedozwolony (np. W księgowości), możesz użyć czegoś takiego:
W przeciwnym razie DecimalFormat jest lepszym rozwiązaniem. (powyższy wariant StringBuilder nie będzie działał z małymi liczbami (<100)
źródło
Myślę, że prostszym i bardziej eleganckim rozwiązaniem, aby wstawić String w określonej pozycji, byłoby to jednowierszowe:
Na przykład, aby wstawić brakujący
:
ciąg znaków czasu:To, co robi, polega na dopasowywaniu
position
znaków z początku ciągu, grupowaniu tych znaków i zastępowaniu grupy samą sobą ($1
), po której następujeinsert
ciąg. Uważaj na replaceAll, nawet jeśli zawsze występuje jedno wystąpienie, ponieważ pierwszy parametr musi być wyrażeniem regularnym.Oczywiście nie ma takiej samej wydajności, jak rozwiązanie StringBuilder, ale uważam, że zwięzłość i elegancja jako prosta i łatwiejsza do odczytania jedna linijka (w porównaniu do ogromnej metody) jest wystarczająca, aby uczynić ją preferowanym rozwiązaniem w większości przypadków braku wydajności -krytyczne przypadki użycia.
Uwaga Rozwiązuję ogólny problem w tytule ze względów dokumentacyjnych, oczywiście jeśli masz do czynienia z liczbami dziesiętnymi, powinieneś użyć proponowanych już rozwiązań specyficznych dla domeny.
źródło
String.format ("% 0d.% 02d", d / 100, d% 100);
źródło
Dla Kotlin dudes;) z zaakceptowanej odpowiedzi (@ MikeThomsen's)
Test ✅
źródło
źródło
źródło
Spróbuj tego :
źródło