首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DecimalFormat模式问题

DecimalFormat模式问题
EN

Stack Overflow用户
提问于 2011-07-14 15:07:13
回答 2查看 4.2K关注 0票数 1

我尝试在Android中使用NumberFormatter格式化一个数字。我使用下面的代码,它工作得很好:

代码语言:javascript
复制
 NumberFormat formatter = new DecimalFormat("###,###");
 String myFormattedString = formatter.format(123456);

但是,当我使用带空格的模式时,就像这样:new DecimalFormat("###,# ##");抛出一个IllegalArgumentException。我已经阅读了有关NumberFormatter和DecimalFormatter的文档,但在模式中找不到任何关于空格的内容。谁能解释为什么我不能使用空格,或者如何将它们添加为允许的字符。提前感谢!

EN

回答 2

Stack Overflow用户

发布于 2011-07-14 15:14:14

在常规的JDK中,这不会抛出异常-它只是将数字格式化为123,456

不清楚您的示例中的空格是什么。对于符号的角色,您有几个选项:

小数分隔符decimal separator

  • group separator

  • exponent separator

  • monetary

您可以使用以下命令来设置其中的每一个:

代码语言:javascript
复制
DecimalFormatSymbols symbols = formatter.getDecimalFormatSymbols();
symbols.setGroupingSeparator(' ');
formatter.setSymbols(symbols);
票数 3
EN

Stack Overflow用户

发布于 2011-10-11 22:49:01

我通过使用standart格式化程序制作了自己的格式化程序,并使用exeptions查找禁止的符号,从而实现了我的目标。希望对其他人有用。

代码语言:javascript
复制
public static String getFormattedNumberWithPattern(String aPattern,
            float aNumber) {
        String lFormattedNumber = null;
        String lOriginalPattern = aPattern;
        try {
            Hashtable<Integer, String> lIlligalChars = new Hashtable<Integer, String>();
            // analyze illegal characters
            for (int i = aPattern.length() - 1; i >= 0; i--) {
                char[] lAux = new char[1];
                aPattern.getChars(i, i + 1, lAux, 0);
                try {
                    // if character is illegal, it throws an exception
                    @SuppressWarnings("unused")
                    NumberFormat lNumberFormatter = new DecimalFormat("#"
                            + lAux[0] + "#");
                } catch (IllegalArgumentException e) {
                    // add illegal chars and indexes to dictionary
                    lIlligalChars.put(new Integer(i), String.valueOf(lAux[0]));}}
            Enumeration<String> lChars = lIlligalChars.elements();
            while (lChars.hasMoreElements()) {
                String lIllegalChar = lChars.nextElement();
                // remove illegal chars from pattern
                aPattern = removeChar(aPattern, lIllegalChar.charAt(0));
            }

            // format number using legal pattern
            NumberFormat lNumberFormatter = new DecimalFormat(aPattern);
            lFormattedNumber = lNumberFormatter.format(aNumber);

            int lLenghtDifference = lOriginalPattern.length()
                    - lFormattedNumber.length();
            // add illegal chars to formatted string using their indexes
            Enumeration<Integer> lKeys = lIlligalChars.keys();
            while (lKeys.hasMoreElements()) {
                Integer lIllegalCharIndex = lKeys.nextElement();
                int lInsertIndex = lIllegalCharIndex.intValue()
                        - lLenghtDifference;
                // insert illegal chars into formatted number
                if (lInsertIndex >= 0
                        || lInsertIndex < lFormattedNumber.length()) {
                    lFormattedNumber = new StringBuffer(lFormattedNumber)
                            .insert(lInsertIndex,
                                    lIlligalChars.get(lIllegalCharIndex)
                                            .charAt(0)).toString();
                }
            }
        } catch (Exception e) {
//          Log.d("info", "formater error:" + e + "mask: " + aPattern
//                  + " number:" + aNumber);
        }

        return lFormattedNumber;
    }

public static String removeChar(String s, char c) {
        StringBuffer r = new StringBuffer(s.length());
        r.setLength(s.length());
        int current = 0;
        for (int i = 0; i < s.length(); i++) {
            char cur = s.charAt(i);
            if (cur != c)
                r.setCharAt(current++, cur);
        }
        r.setLength(current);
        return r.toString();
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6689621

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档