2012-09-11 16 views
17

W języku C instrukcja printf() pozwala na podanie dokładnych długości na liście parametrów.java odpowiednik printf ("% *. * F")

printf("%*.*f", 7, 3, floatValue); 

gdzie gwiazdki są zastępowane odpowiednio pierwszą i drugą wartością.

Szukam odpowiednika w systemie Android/Java; String.format() zgłasza wyjątek.

EDIT: Dzięki, @Tenner; to rzeczywiście działa.

Odpowiedz

14

używam

int places = 7; 
int decimals = 3; 

String.format("%" + places + "." + decimals + "f", floatValue); 

Trochę brzydki (ciąg konkatenacji i sprawia, że ​​nie wykonywać dobrze), ale działa.

3
System.out.print(String.format("%.1f",floatValue)); 

Drukuje floatValue z 1 przecinku precyzji

+0

Możesz użyć System.out.format (...) bezpośrednio tutaj – RNJ

+0

@BelusC Są oba. Zobacz http://docs.oracle.com/javase/1.5.0/docs/api/java/io/PrintStream.html#format%28java.lang.String,%20java.lang.Object...%29 – RNJ

0

Jest tak ...

%AFWPdatatype 

A - liczba argumentów

F - Flagi

W - Szerokość

P - Precision

String.format("%.1f",float_Val);

1

Można formatować format:

String f = String.format("%%%d.%df", 7, 3); 
System.out.println(f); 
System.out.format(f, 111.1111); 

Wyjście to będzie:

%7.3f 
111,111 

Można też użyć trochę pomocnika tak:

public static String deepFormatter(String format, Object[]... args) { 
    String result = format; 
    for (int i = 0; i != args.length; ++i) { 
     result = String.format(result, args[i]); 
    } 

    return result; 
} 

Następujące połączenie będzie wówczas równoznaczne z powyższym kodem i zwróci 111,111.

deepFormatter("%%%d.%df", new Object[] {7, 3}, new Object[] {111.1111}); 

Nie jest tak ładna jak printf, a format wejściowy może zostać zagracony, ale można z nim zrobić znacznie więcej.