2009-01-11 15 views
48

muszę sformatować wartość dziesiętną na ciąg znaków, gdzie zawsze wyświetlać na leasing 2 miejsc po przecinku, a co najwyżej 4.java Format String dziesiętny

tak na przykład

"34.49596" would be "34.4959" 
"49.3" would be "49.30" 

można to zrobić za pomocą Polecenie String.format? Czy istnieje łatwiejszy/lepszy sposób to zrobić w java.

Odpowiedz

64

Chcesz java.text.DecimalFormat.

DecimalFormat df = new DecimalFormat("0.00##"); 
String result = df.format(34.4959); 
+2

Śledź ten sam przykład dostaniesz zły wynik. Musisz użyć RoundingMode.DOWN dla tego konkretnego przykładu. W przeciwnym razie używa HALF_EVEN. Nie, jednak negatywne. –

3

java.text.NumberFormat jest chyba to, co chcesz.

37

Oto mały fragment kodu, który spełnia swoje zadanie:

double a = 34.51234; 

NumberFormat df = DecimalFormat.getInstance(); 
df.setMinimumFractionDigits(2); 
df.setMaximumFractionDigits(4); 
df.setRoundingMode(RoundingMode.DOWN); 

System.out.println(df.format(a)); 
+0

Bez negatywów, ale Twój kod kończy się niepowodzeniem dla pierwszego przykładu podanego przez oryginalny plakat. Trzeba użyć RoundingMode.DOWN, w przeciwnym razie domyślnie używa HALF_EVEN, przypuszczam. –

+0

Dzięki za korektę Adeel –

1

numberFormat i DecimalFormat są zdecydowanie to, co chcesz. Zwróć też uwagę na metodę NumberFormat.setRoundingMode(). Za jego pomocą można kontrolować sposób zaokrąglania lub obcinania podczas formatowania.

113

Tak można zrobić z String.format:

String result = String.format("%.2f", 10.0/3.0); 
// result: "3.33" 

result = String.format("%.3f", 2.5); 
// result: "2.500" 
+8

To może nie być poprawna odpowiedź na zadane pytanie, ale jest to odpowiedź, którą tu przyjąłem. Dzięki! – milosmns

+0

Szukałem "% .2f", pomógł mi –