2012-01-11 65 views
237

可能重复:
Round a double to 2 significant figures after decimal point最佳方式放置

我处理大量的重复值在我的应用程序,是有没有简单的方法处理Java中十进制值的格式?

是否有这样做比

DecimalFormat df = new DecimalFormat("#.##"); 

的任何其他更好的办法我想基本上做的是像

23.59004 to 23.59 

35.7 to 35.70 

3.0 to 3.00 

9 to 9.00 
+1

比一条附加线更容易吗?我很确定这是格式化小数的最简单,最清晰的方式。请注意,如果此程序将由不同地区的人使用,则DecimalFormat将使用','或'。'。适用于小数分隔符。这在我最近研究的一个项目中引起了一些问题:写入文本框并从中读取错误的值。 – Dogmatixed 2012-01-11 13:18:04

+1

这就是我非常担心的,我读默认语言环境DecimalFormat。你能告诉我你是如何使本地化工作的? – 2012-01-11 13:21:23

+0

我使用JFormattedTextFields进行输入,使用setValue()填充它们并使用getValue()从它们中读取数据。对于需要小数点的地方,我使用了DecimalFormatSymbols对象。 – Dogmatixed 2012-01-11 21:02:24

回答

380

没有,有没有更好的办法格式的双精度值。

其实你有你的方式错误。你想要的是:

DecimalFormat df = new DecimalFormat("#.00"); 

注意"00",意思正好小数点后两位。

如果使用"#.##"#的意思是“可选”的数字),它会掉落尾随零 - 即new DecimalFormat("#.##").format(3.0d);打印只是"3",不"3.00"

+0

实际上,使用#。##格式化3.0将打印3. – 2013-04-02 04:29:56

+0

什么0.99将它转换为.99或0.99? – 2014-06-20 01:47:15

+15

@MubasharAhmad'“.99”' - '#'表示“可选零”。如果你想保留前导零(即输出'“0.99”')使用模式'“#0.00”' – Bohemian 2014-06-20 02:42:00

294

另一种方法是使用String.format

double[] arr = { 23.59004, 
    35.7, 
    3.0, 
    9 
}; 

for (double dub : arr) { 
    System.out.println(String.format("%.2f", dub)); 
} 

输出:

23.59 
35.70 
3.00 
9.00 

您也可以使用System.out.format(同样的方法签名),或创建一个java.util.Formatter这在相同的方式工作。