我想将数字格式化为最多N位小数。有another similar and popular question here,但这并不是我正在寻找的。 p>
我正在寻找这样的东西,让我说我想要最大化。 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"
与另一个问题的不同之处在于,如果我不需要它,我不希望在逗号后面使用尾随零。
我想知道这是否适用于 String.format()
,而不是Math.round()
或DecimalFormat。上面显示的另一个问题提供了DecimalFormat的解决方案。
在N作为参数的情况下,答案不需要变量。我只选择N作为例子。
答案 0 :(得分:3)
您可以使用 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));
}
输出:
1
1.2
1.23
1.23
1.24
更新:由于您更新了问题,并且您想使用String.format,因此在SO中搜索找到此thread并利用技巧加正则表达式。所以,你可以使用这样的东西:
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*$", "");
}
输出结果为:
1
1.2
1.23
1.23
1.24
无论如何,我会改用 DecimalFormat 。
答案 1 :(得分:2)
您还可以使用DecimalFormat
控制setMaximumFractionDigits(...)
的格式,如下所示:
double d = 1.234567;
DecimalFormat df = new DecimalFormat();
for (int i = 2; i < 6; ++i) {
df.setMaximumFractionDigits(i);
System.out.println(df.format(d));
}
对于您的用例,这可能比使用StringBuilder
或类似的格式生成格式更好。
答案 2 :(得分:0)
另一种解决方案,如果你仍想用String.format()
做,这是解决方案:
Java代码:ParseN.java
public class ParseN{
public static void main(String []args){
System.out.println(parseN(1.00));
System.out.println(parseN(1.20));
System.out.println(parseN(1.23));
System.out.println(parseN(1.234));
System.out.println(parseN(1.235));
}
static String parseN(Double d)
{
String s = String.format("%.2f", d);
s = s.indexOf(".") < 0 ? s : s.replaceAll("0*$", "").replaceAll("\\.$", "");
return s;
}
}
输出:
1
1.2
1.23
1.23
1.24
希望它完全回答你的问题。另请参阅this。
答案 3 :(得分:0)
使用NumberFormat。
NumberFormat format = NumberFormat.getInstance();
format.setMaximumFractionDigits(2); // or N
System.out.println(format.format(1)); // -> 1
System.out.println(format.format(1.2)); // -> 1.2
System.out.println(format.format(1.23)); // -> 1.23
System.out.println(format.format(1.234)); // -> 1.23
System.out.println(format.format(1.235)); // -> 1.24
NumberFormat也可以与语言环境一起使用,您可以更改舍入模式。
NumberFormat format = NumberFormat.getInstance(Locale.GERMANY);
format.setMaximumFractionDigits(2);
format.setRoundingMode(RoundingMode.CEILING);
System.out.println(format.format(1)); // -> 1
System.out.println(format.format(1.2)); // -> 1,2
System.out.println(format.format(1.23)); // -> 1,23
System.out.println(format.format(1.234)); // -> 1,24
System.out.println(format.format(1.235)); // -> 1,24