使用String.format进行Java小数格式化?

86

我需要将一个小数的值格式化为一个字符串,其中至少显示 2 位小数,最多显示 4 位。

例如:

"34.49596" would be "34.4959" 
"49.3" would be "49.30"

使用String.format命令可以实现这一目标吗?
或者在Java中是否有更简单/更好的方法来做到这一点。

6个回答

190

你可以使用 String.format 来实现:

String result = String.format("%.2f", 10.0 / 3.0);
// result:  "3.33"

result = String.format("%.3f", 2.5);
// result:  "2.500"

29
可能这不是对所问问题的正确答案,但这就是我来这里寻找的答案。谢谢! - milosmns

95

您需要使用java.text.DecimalFormat。

DecimalFormat df = new DecimalFormat("0.00##");
String result = df.format(34.4959);

5
跟随相同的例子会得到错误的结果。在这个特定的例子中,您需要使用RoundingMode.DOWN。否则,它将使用HALF_EVEN。不是负数。 - Adeel Ansari

41

下面是一个简短的代码片段,可以完成这个任务:

double a = 34.51234;

NumberFormat df = DecimalFormat.getInstance();
df.setMinimumFractionDigits(2);
df.setMaximumFractionDigits(4);
df.setRoundingMode(RoundingMode.DOWN);

System.out.println(df.format(a));

没有贬义,但是你的代码在原帖提供的第一个示例中失败了。需要使用RoundingMode.DOWN,否则它默认使用HALF_EVEN,我想。 - Adeel Ansari

3

java.text.NumberFormat可能是你想要的。


2

NumberFormat和DecimalFormat是您想要的。另外请注意NumberFormat.setRoundingMode()方法。你可以使用它来控制格式化期间如何应用四舍五入或截断。


1

您需要使用java.text.DecimalFormat


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接