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为例。
您可以使用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。