代码之家  ›  专栏  ›  技术社区  ›  Willi Ballenthin

如何使用可变精度的Java Struts?

  •  23
  • Willi Ballenthin  · 技术社区  · 16 年前

    我想改变我正在根据用户输入格式化的字符串中双重表示的精度。现在,我正在尝试以下方法:

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

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

    3 回复  |  直到 8 年前
        1
  •  18
  •   vicatcu    16 年前

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

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

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

        2
  •  5
  •   Willi Mentzel user670265    9 年前

    你可以使用 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)
    
        3
  •  2
  •   Willi Mentzel user670265    9 年前

    为什么不:

    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);
    }
    
    推荐文章