java 。使用 DecimalFormat 设置小数部分的格式

标签 java android decimal string-formatting decimalformat

关于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/

相关文章:

java - Libgdx - 基本着色器不工作

安卓 : How to analyse the native heap dump?

android - 在抽屉菜单的页脚中添加按钮

java - 为什么我不能写文字?

java - SQL查询平均大记录

java - 在这种情况下如何扩展自定义布局并编辑 View ?

java - 批处理文件显示无法找到或加载主类

c - 这个数字如何表示为 2^-22*(1/10) 的倍数?那是怎么推导出来的?

bash - 使用 float 时的语法错误

math - 如何制作有理数的 "working"重复十进制表示?