【问题标题】:Method to Insert Commas into Large Numbers将逗号插入大数的方法
【发布时间】:2014-03-12 04:17:44
【问题描述】:

是否有已经存在的方法,如果没有,是否可以编写可以格式化大数字并在其中插入逗号的方法?

100     = 100
1000    = 1,000  
10000   = 10,000
100000  = 100,000
1000000 = 1,000,000


public String insertCommas(Integer largeNumber) {

}

【问题讨论】:

    标签: java number-formatting


    【解决方案1】:

    使用NumberFormat,您可以轻松做到这一点:

    NumberFormat format = NumberFormat.getInstance(Locale.US);
    
    System.out.println(format.format(100));
    System.out.println(format.format(1000));
    System.out.println(format.format(1000000));
    

    将输出:

    100
    1,000
    1,000,000
    

    【讨论】:

      【解决方案2】:

      您可以将NumberFormat#getNumberInstanceLocale.US 一起使用:

      Locale 对象代表特定的地理、政治或 文化区。需要 Locale 执行其操作的操作 任务被称为 locale-sensitive 并使用 Locale 来定制 用户的信息。例如,显示一个数字是 区域敏感操作——数字应根据 遵守用户所在国家、地区的风俗习惯, 或文化。


      System.out.println(NumberFormat.getNumberInstance(Locale.US).format(10000000));
      

      这将打印:

      10,000,000
      

      旁注:在 Java 7 中,您可以编写带有下划线的 int:1_000_000。

      【讨论】:

        【解决方案3】:

        你看过DecimalFormat(抽象NumberFormat的派生词)吗?你可以customise你需要的格式。

        DecimalFormat myFormatter = new DecimalFormat("###,###.###");
        String output = myFormatter.format(value);
        

        另请注意,您可以根据语言环境确定格式。

        【讨论】:

          【解决方案4】:

          你试过java.text.NumberFormat吗?

          【讨论】:

            【解决方案5】:

            我试图非常清楚我在做什么,它可以用更少的行来完成。

            算法很简单,我反转输入字符串,然后我使用正则表达式拆分数字,在每个匹配中我们添加一个逗号。

            如果数字大小模块 3 为零(例如 123456),我们必须删除最后一个逗号。

            现在我们通过再次反转它来恢复原始字符串顺序,瞧。

            public String insertCommas(Integer largeNumber) {
            
                String result;
                String reversedNum = new StringBuilder(""+largeNumber).reverse().toString();
                String reversedResult = "";
            
                Pattern pattern = Pattern.compile("\\d{3}");
                Matcher matcher = pattern.matcher(reversedNum);
            
                int lastIndex = reversedNum.length();
                while(matcher.find()){
                    reversedResult += matcher.group()+",";
                    lastIndex = matcher.end();
                }
            
                String remaining = reversedNum.substring(lastIndex);
                reversedResult += remaining; 
                result =  new StringBuilder(reversedResult).reverse().toString();
                if(remaining.isEmpty()){
                    result =  new     StringBuilder(reversedResult).reverse().toString().substring(1);
                }else{
                    result =  new StringBuilder(reversedResult).reverse().toString();
                }
            
                return result;
            }
            

            【讨论】:

            • 哈哈,虽然他想做一些功课。顺便说一句,正确的做法是使用 NumberFormat
            猜你喜欢
            • 2011-05-12
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多