将逗号插入大数的方法

时间:2014-02-13 10:34:35

标签: java number-formatting

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

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


public String insertCommas(Integer largeNumber) {

}

5 个答案:

答案 0 :(得分:5)

您可以NumberFormat#getNumberInstance使用Locale.US

  

Locale对象表示特定的地理,政治或   文化区域。需要Locale执行其操作的操作   task被称为区域设置敏感,并使用Locale进行定制   用户的信息。例如,显示数字是a   区域设置敏感操作 - 编号应格式化   用户所在国家,地区的习俗和惯例,   或文化。


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

这将打印:

10,000,000

附注:在Java 7中,您可以使用下划线写出int:1_000_000。

答案 1 :(得分:5)

使用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 :(得分:2)

您是否看过DecimalFormat(摘要NumberFormat的衍生物)?您可以根据需要customise格式。

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

另请注意,您可以根据区域设置确定格式。

答案 3 :(得分:0)

您是否尝试过java.text.NumberFormat

答案 4 :(得分:0)

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

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

如果数字大小模块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;
}