将float格式化为最多N个小数位

mac*_*mac 2 java format floating-point numbers

我想将数字格式化为最多N个小数位。这里还有另一个类似且受欢迎的问题,但这并不是我想要的。

我正在寻找这样的东西,假设我想要最大。2个地方,所以这将是:

1.00  -> "1"    (not "1.00")
1.20  -> "1.2"  (not "1.20")
1.23  -> "1.23"
1.234 -> "1.23"
1.235 -> "1.24"
Run Code Online (Sandbox Code Playgroud)

与另一个问题的不同之处在于,如果不需要,我不想在逗号后面加上零。

我想知道这是否可以String.format()通过Math.round(),或DecimalFormat来完成。上面显示的另一个问题提供了DecimalFormat的解决方案。

给定N作为参数,答案不必为变量。我只是以N为例。

Fed*_*zza 5

您可以使用DecimalFormat

引用文档:

您可以使用DecimalFormat类将十进制数字格式化为特定于语言环境的字符串。此类允许您控制前导和尾随零,前缀和后缀,分组(千位)分隔符和十进制分隔符的显示。

井号(#)表示一个数字,句点是小数点分隔符的占位符。

public void test(){
    DecimalFormat df = new DecimalFormat("#.##");
    System.out.println(df.format(1.00));
    System.out.println(df.format(1.20));
    System.out.println(df.format(1.23));
    System.out.println(df.format(1.234));
    System.out.println(df.format(1.235));
}
Run Code Online (Sandbox Code Playgroud)

输出:

1
1.2
1.23
1.23
1.24
Run Code Online (Sandbox Code Playgroud)

更新:由于您更新了问题并且想要使用String.format,因此在SO中搜索找到了该线程并利用了一个技巧和正则表达式。因此,您可以使用以下方式:

public static void main (String[] args) throws java.lang.Exception
{
    System.out.println(fmt(1.00));
    System.out.println(fmt(1.20));
    System.out.println(fmt(1.23));
    System.out.println(fmt(1.234));
    System.out.println(fmt(1.235));
}

public static String fmt(double d)
{
    if(d == (long) d)
        return String.format("%d",(long)d);
    else
        return String.format("%.2f",d).replaceAll("0*$", "");
}
Run Code Online (Sandbox Code Playgroud)

输出为:

1
1.2
1.23
1.23
1.24
Run Code Online (Sandbox Code Playgroud)

无论如何,我会改用DecimalFormat