2012-09-11 82 views
17

在C中,printf()语句允许在参数列表中提供精度长度。java等价于printf(“%*。* f”)

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

其中星号分别被替换为第一和第二值。

我正在寻找Android/Java中的等价物; String.format()抛出一个异常。

编辑:谢谢@Tenner;它确实有效。

回答

14

我用

int places = 7; 
int decimals = 3; 

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

难看一点(和字符串连接使得它表现不好),但它的作品。

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

这将输出的floatValue带1位小数的精度

+0

您可以直接在这里使用System.out.format(...) – RNJ

+0

@BelusC有两个。请参阅http://docs.oracle.com/javase/1.5.0/docs/api/java/io/PrintStream.html#format%28java.lang.String,%20java.lang.Object...%29 – RNJ

0

它是这样的...

%AFWPdatatype 

A - 参数

F数 - 旗

W - 宽度

P - 精密

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

1

你可以格式化格式:

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

这将输出:

%7.3f 
111,111 

你也使用小助手是这样的:

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

以下调用将与上述代码等效并返回111,111

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

它不像printf那样漂亮,输入格式可能会变得混乱,但你可以用更多的东西来做。