将 Double 值格式化为 2 个小数位的最佳方法 [重复]
Posted
技术标签:
【中文标题】将 Double 值格式化为 2 个小数位的最佳方法 [重复]【英文标题】:Best way to Format a Double value to 2 Decimal places [duplicate] 【发布时间】:2012-02-07 20:13:22 【问题描述】:我在我的应用程序中处理大量双精度值,有没有什么简单的方法可以在 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 将使用“,”或“。”适合小数点分隔符。这在我最近处理的一个项目中引起了一些问题:写入文本框并从中读取错误的值。 这就是我非常担心的,我在默认语言环境下阅读了 DecimalFormat。你能告诉我你是如何通过本地化工作的吗? 我使用 JFormattedTextFields 进行输入,使用 setValue() 填充它们并使用 getValue() 读取它们。对于需要小数的地方,我使用了 DecimalFormatSymbols 对象。 还有一个更简单的方法是使用Math.round()
方法。解决这个问题的话题在这里:link
【参考方案1】:
不,没有更好的办法。
实际上,您的模式有错误。你想要的是:
DecimalFormat df = new DecimalFormat("#.00");
注意"00"
,意思是正好两位小数。
如果您使用"#.##"
(#
表示“可选”数字),它将删除尾随零 - 即new DecimalFormat("#.##").format(3.0d);
仅打印"3"
,而不是"3.00"
。
【讨论】:
其实用#.##格式化3.0会打印3. @MubasharAhmad".99"
- #
表示“可选零”。如果要保留前导零(即输出"0.99"
),请使用模式"#0.00"
你可以使用 String num = String.format("%.2f",23.59004);然后打印数字。它将打印 23.59。
请注意,DecimalFormat 会根据当前机器的语言环境更改分隔符。因此,可以将值打印到屏幕上,但如果您必须将值发送到其他地方进行解析(例如:数据库),则不可靠。这同样适用于 String.format()。
@Bohemian 是的,另一个有效选项。我只是提到这一点,因为不是每个人都知道这一点。对于大多数这些实用程序,ThreadLocal 实例的性能比每次重新初始化一个新实例的开销都要高。就像所有事情一样,它只取决于应用程序将如何使用它以及哪种解决方案是最好的(即不同步、同步、每次都是新的、ThreadLocal 等)。【参考方案2】:
另一种方法是使用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
。
【讨论】:
这也适用于像0这样的数字。# String.format 会向上还是向下取整? @jumping_monkey 你可以自己试试 ;) 它进行标准舍入,即舍入到最近 呵呵,我试图改进答案,让读者不需要尝试;-)。谢谢朋友。以上是关于将 Double 值格式化为 2 个小数位的最佳方法 [重复]的主要内容,如果未能解决你的问题,请参考以下文章