如何使用可变精度的Java String.format?

我想根据用户输入改变字符串中双重表示的精度。 现在我正在尝试这样的事情:

String foo = String.format("%.*f\n", precision, my_double); 

但是我收到了java.util.UnknownFormatConversionException 。 我对这种方法的启发是C printf和这个资源 (1.3.1节)。

我在某处有一个简单的语法错误,Java支持这种情况,还是有更好的方法?

编辑:

我想我可以这样做:

 String foo = String.format("%." + precision + "f\n", my_double); 

但是我仍然对这种操作的原生支持感兴趣。

您有点回答了自己的问题 – 动态构建格式字符串…有效格式字符串遵循此处列出的约定: http : //java.sun.com/j2se/1.5.0/docs/api/java/util/Formatter .html#syntax 。

如果你想要一个格式化的十进制,占用8个字符(包括小数点),你想要小数点后4位数,你的格式字符串应该看起来像“%8.4f”…

据我所知,除了格式字符串灵活外,Java中没有“原生支持”。

您可以使用DecimalFormat类。

 double d1 = 3.14159; double d2 = 1.235; DecimalFormat df = new DecimalFormat("#.##"); double roundedD1 = df.format(d); // 3.14 double roundedD2 = df.format(d); // 1.24 

如果要在运行时调用精度设置:

 df.setMaximumFractionDigits(precision) 

为什么不 :

 String form = "%."+precision+"f\n"; String foo = String.format(form, my_double); 

要么 :

 public static String myFormat(String src, int precision, Object args...) { String form = "%."+precision+"f\n"; return String.format(form, args); }