开发者

How to Java String.format with a variable precision?

开发者 https://www.devze.com 2022-12-20 14:43 出处:网络
I\'d like to vary the precision of a double representation in a string I\'m formatting based on user input. Right now I\'m trying something like:

I'd like to vary the precision of a double representation in a string I'm formatting based on user input. Right now I'm trying something like:

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

however I receive a java.u开发者_开发知识库til.UnknownFormatConversionException. My inspiration for this approach was C printf and this resource (section 1.3.1).

Do I have a simple syntax error somewhere, does Java support this case, or is there a better approach?

Edit:

I suppose I could do something like:

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

but I'd still be interested in native support for such an operation.


You sort of answered your own question - build your format string dynamically... valid format strings follow the conventions outlined here: http://java.sun.com/j2se/1.5.0/docs/api/java/util/Formatter.html#syntax.

If you want a formatted decimal that occupies 8 total characters (including the decimal point) and you wanted 4 digits after the decimal point, your format string should look like "%8.4f"...

To my knowledge there is no "native support" in Java beyond format strings being flexible.


You can use the DecimalFormat class.

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

If you want to set the precision at run time call:

df.setMaximumFractionDigits(precision)


Why not :

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

or :

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


double pi = Math.PI; // 3.141592653589793
int n = 5;
DecimalFormat df = new DecimalFormat();
df.setMaximumFractionDigits(n);
System.out.printf(df.format(pi)); // 3.14159

You can set value of n at runtime. Here from the above code given n = 5 will print 3.14159

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号