我需要格式化一个小数点后两位的数字。原始数字可以是整数,也可以是保留三位小数的数字。但是,无论原始数字是整数还是有小数位,结果的格式都应始终包含逗号和两位小数。
我正在使用以下代码来格式化代码,但在上述 2 和 3 种情况下未能添加两位小数。
String originalNumber = "56565656.7";
BigDecimal b = new BigDecimal(originalNumber).setScale(2, BigDecimal.ROUND_HALF_UP);
String formattedNumber = NumberFormat.getInstance().format(b);
请告诉我是否有任何方法可以有效地完成此任务。
提前致谢。
看一下 DecimalFormat 类。
您也可以使用 BigDecimal 类中的 setScale 方法。
BigDecimal bg1 = new BigDecimal("56565656.342");
BigDecimal bg2 = new BigDecimal("56565656.00");
BigDecimal bg3 = new BigDecimal("56565656.70");
DecimalFormat df = new DecimalFormat("###,###.00");
System.out.println(df.format(bg1.doubleValue()));
System.out.println(df.format(bg2.doubleValue()));
System.out.println(df.format(bg3.doubleValue()));
System.out.println(bg1.setScale(2, BigDecimal.ROUND_HALF_UP));
System.out.println(bg2.setScale(2, BigDecimal.ROUND_HALF_UP));
System.out.println(bg3.setScale(2, BigDecimal.ROUND_HALF_UP));
产量:
56,565,656.34
56,565,656.00
56,565,656.70
56565656.34
56565656.00
56565656.70
编辑:还忘了提及:如果您追求精度,我建议您使用
setScale
方法,使用 .doubleValue()
方法会产生 double
,这可能会导致精度损失。
只需使用
NumberFormat
并指定小数位数和舍入方法即可打印:
String [] originalNumbers = new String[] {
"56565656.342",
"56565656.7",
"56565656"
};
NumberFormat df = NumberFormat.getInstance();
df.setMinimumFractionDigits(2);
df.setMaximumFractionDigits(2);
df.setRoundingMode(RoundingMode.HALF_UP);
for (String number : originalNumbers) {
String formattedNumber = df.format(new BigDecimal(number));
System.out.println(formattedNumber);
}
将打印
56,565,656.34
56,565,656.70
56,565,656.00
** 编辑 **
DecimalFormat df = new DecimalFormat("#,###.00");
将产生与上面给定代码完全相同的结果。
DecimalFormat 类会为你做这件事......你必须指定适当的格式。