关于Java中DecimalFormat的一个小问题。
我需要显示数字 178500.59999,例如 (178 500,599 99)
我尝试使用新的 DecimalFormat(format = ###,##0.00) 结果是 178 500,59
如何使用 DecimalFormat 来显示所有小数部分(该部分可以具有任意长度)+小数部分的格式如 178 500,599 99
最佳答案
虽然这有点 hacky,但您可以通过这种方式扩展十进制格式类:
DecimalFormatSymbols formatSymbols = new
DecimalFormatSymbols(Locale.getDefault());
formatSymbols.setDecimalSeparator(',');
formatSymbols.setGroupingSeparator(' ');
final String pattern = "####,####.#####";
DecimalFormat decimalFormat = new DecimalFormat(pattern, formatSymbols) {
@Override
public StringBuffer format(double number, StringBuffer res, FieldPosition fieldPosition) {
StringBuffer noSpaceOnDecimalPart = super.format(number, res, fieldPosition);
String result = noSpaceOnDecimalPart.toString();
if (noSpaceOnDecimalPart != null) {
int indexOf = noSpaceOnDecimalPart.indexOf(String.valueOf(getDecimalFormatSymbols().getDecimalSeparator()));
if (indexOf >= 0) {
String integerPart = noSpaceOnDecimalPart.substring(0, indexOf);
String decimalPart = noSpaceOnDecimalPart.substring(indexOf + 1);
StringBuilder formattedDecimal = new StringBuilder("");
int i = 0;
while (i < decimalPart.length()) {
if (i != 0 && i % 3 == 0) {
formattedDecimal.append(getDecimalFormatSymbols().getGroupingSeparator());
}
formattedDecimal.append(decimalPart.charAt(i));
i++;
}
result = integerPart + getDecimalFormatSymbols().getDecimalSeparator() + formattedDecimal;
}
}
return new StringBuffer(result);
}
};
decimalFormat.setGroupingSize(3);
String number = decimalFormat.format(178500.59999);
System.out.println(number); // prints 178 500,599 99
这只是一个演示,根据您的用例,您可以优化代码并添加对更多配置的支持(更好地尊重 DecimalFormat 的约定),但这至少是一个起点。我没有找到任何方法用更常规的代码向小数部分添加空格。
关于 java 。使用 DecimalFormat 设置小数部分的格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48262246/