2012-09-11 27 views
17

C, printf() ifadesi, hassas uzunlukların parametre listesinde sağlanmasına izin verir. Sırasıyla yıldızların birinci ve ikinci değerlerle değiştirildiğijava eşdeğeri printf ("% *. * F")

.

Android/Java'da bir eşdeğer arıyorum; String.format() bir istisna atar.

DÜZENLEME: Teşekkürler, @Tenner; gerçekten çalışıyor.

cevap

14

Ben

int places = 7; 
int decimals = 3; 

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

kullanmak Biraz çirkin (ve dize birleştirme o iyi performans yapar), ama işe yarıyor.

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

Bu hassasiyet

+0

System.out.format (...) 'ı doğrudan buradan kullanabilirsiniz – RNJ

+0

@BelusC İkisi de vardır. Http://docs.oracle.com/javase/1.5.0/docs/api/java/io/PrintStream.html#format%28java.lang.String%%20java.lang.Object...%29 adresine bakın. – RNJ

0

Onun böyle 1 ondalık ... ile floatValue yazdırır

%AFWPdatatype 

A - Argümanlar

F sayısı - Flags

W - Genişlik

P - Hassas

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

Sen formatını biçimlendirebilirdiniz
1

:

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

çıktısı verir:

%7.3f 
111,111 

Ayrıca böyle küçük bir yardımcı kullanabilirsiniz:

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; 
} 

Aşağıdaki çağrı, yukarıdaki kodla eşdeğer olur ve 111,111 değerini döndürür.

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

O değil gibi güzel onunla çok daha fazlasını yapabilirsiniz printf ve darmadağın olabilir girdi biçimi, ancak.