有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如何使用Java字符串。以可变精度格式化?

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

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

然而,我收到了一封java.util.UnknownFormatConversionException。我对这种方法的灵感来自C printf和this resource(第1.3.1节)

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

编辑:

我想我可以这样做:

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

但我仍然对这种行动的本土支持感兴趣


共 (4) 个答案

  1. # 1 楼答案

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

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

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

  2. # 2 楼答案

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

    您可以在运行时设置n的值。根据上面给出的代码,n=5将打印3.14159

  3. # 3 楼答案

    可以使用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)
    
  4. # 4 楼答案

    为什么不:

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