Java 将双精度值格式化为小数点后2位的最佳方法

Java 将双精度值格式化为小数点后2位的最佳方法,java,Java,在我的应用程序中,我要处理很多双值,有没有简单的方法来处理Java中十进制值的格式 还有比这更好的方法吗 DecimalFormat df = new DecimalFormat("#.##"); 我想做的基本上是格式化双值,比如 23.59004 to 23.59 35.7 to 35.70 3.0 to 3.00 9 to 9.00 不,没有更好的办法了 实际上,您的模式中有一个错误。你想要的是: DecimalFormat df = new DecimalFormat("#

在我的应用程序中,我要处理很多双值,有没有简单的方法来处理Java中十进制值的格式

还有比这更好的方法吗

 DecimalFormat df = new DecimalFormat("#.##");
我想做的基本上是格式化双值,比如

23.59004  to 23.59

35.7  to 35.70

3.0 to 3.00

9 to 9.00

不,没有更好的办法了

实际上,您的模式中有一个错误。你想要的是:

DecimalFormat df = new DecimalFormat("#.00"); 
请注意
“00”
,正好表示小数点后两位


如果使用
“#.##”
#
表示“可选”数字),它将删除尾随的零-即
新的十进制格式(“#.##”)。格式(3.0d)只打印
“3”
,而不是
“3.00”

另一种方法是使用
字符串。格式

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
,它以相同的方式工作。

比增加一行容易吗?我很确定这是最简单、最清晰的十进制格式。请注意,如果此程序将由不同地区的人使用,DecimalFormat将使用“,”或“.”作为十进制分隔符。这在我最近从事的一个项目中造成了一些问题:写入文本框并从中读取错误的值。这正是我非常担心的,我在默认区域设置中读取了十进制格式。你能告诉我你是如何使用本地化的吗?我使用JFormattedTextFields作为输入,使用setValue()填充它们,并使用getValue()读取它们。对于需要小数的地方,我使用了DecimalFormatSymbols对象。还有一种更简单的方法是使用
Math.round()
方法。解决此问题的主题是:实际上,用#.##格式化3.0将打印3。@MubasharAhmad
“.99”
表示“可选零”。如果要保留前导零(即输出
“0.99”
),请使用模式
“#0.00”
,您可以使用String num=String.format(“%.2f”,23.59004);然后打印num。它将打印23.59。请注意,十进制格式将根据当前计算机的区域设置更改分隔符。因此,将值打印到屏幕上是可以的,但如果必须将值发送到其他地方(例如数据库)进行解析,则不可靠。这同样适用于String.format()。@Bohemian Yes,另一个有效选项。我只是提到这一点,因为不是每个人都知道这一点。对于大多数这些实用程序,ThreadLocal实例的性能要比每次重新初始化新实例的开销更高。与所有内容一样,这取决于应用程序将如何使用它,以及哪种解决方案是最好的(即非同步、同步、每次新、ThreadLocal等)。这也适用于0等数字#