如何以可变精度Java String.format?

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

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

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

我是否在某个地方遇到了简单的语法错误,Java是否支持这种情况,或者是否有更好的方法?

编辑:

我想我可以做这样的事情:

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

但我仍然对这种操作的本机支持感兴趣。


答案 1

你回答了自己的问题 - 动态构建格式字符串...有效格式字符串遵循此处概述的约定:http://java.sun.com/j2se/1.5.0/docs/api/java/util/Formatter.html#syntax

如果您想要一个总共占用 8 个字符(包括小数点)的格式化小数,并且您希望小数点后有 4 位数字,则格式字符串应类似于“%8.4f”...

据我所知,除了格式字符串的灵活性之外,Java中没有“本机支持”。


答案 2

可以使用 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)