Java 将双精度值格式化为小数点后2位的最佳方法
在我的应用程序中,我要处理很多双值,有没有简单的方法来处理Java中十进制值的格式 还有比这更好的方法吗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("#
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等数字#