5

我有一系列 BigDecimal 数字(例如:)123456.78。我想添加逗号,使它们看起来像这样123,456.78,所以我将它们转换为字符串并使用以下代码:

private static String insertCommas(String str) {
    if(str.length() < 4){
        return str;
    }

    return insertCommas(str.substring(0, str.length() - 3)) + 
        "," +         
        str.substring(str.length() - 3, str.length());
}

要做到这一点。问题是当我运行insertCommas(str)它时会打印123,456,.78. 我想不出一种方法来防止逗号放在小数点之前。

--

还有一件事,它必须适用于大数和小数,这就是为什么我使用上面的代码而不是更简单的代码。

我也尝试过DecimalFormat("#,##0.00")类似的类型,但是当数字达到某个点时,它们会被零替换,这使我丢失了有关数字的信息。

帮助?

4

4 回答 4

9

有一种更简单的方法可以做到这一点。你只需要使用SimpleDecimalFormat

private static String insertCommas(BigDecimal number) {
  // for your case use this pattern -> #,##0.00
  DecimalFormat df = new DecimalFormat("#,##0.00");
  return df.format(number);
}

private static String insertCommas(String number) {
  return insertCommas(new BigDecimal(number));
}

你可以在这里学习新的模式和更多内容:DecimalFormat API

希望这可以帮助 :)

于 2012-10-28T15:50:40.927 回答
0

聚会有点晚了,但是如果您将小数转换为字符串,则可以使用简单的 for 循环相当轻松地插入逗号。

for (int i=amount.indexOf('.')-3; i > 0; i -= 3){
String firstPart = amount.substring(0,i);
String lastPart = amount.substring(i);
amount = firstPart + ","+ lastPart;
}

希望有帮助。

于 2013-11-01T13:10:07.680 回答
0

如果你坚持让你的功能工作,你可以使用这个:

private static String insertCommas(String str) {
    if(str.length() < 4){
        return str;
    }

    String[] tokens = str.split("[.]");
    return insertCommas(tokens[0].substring(0, tokens[0].length() - 3)) +
        "," +
        str.substring(tokens[0].length() - 3, tokens[0].length()) +
        ((tokens.length > 1) ? ("." + tokens[1]) : "");
}
于 2012-10-28T16:00:10.460 回答
0

看看 Java 的格式化数字打印输出教程。这将教您如何在打印或转换为字符串期间格式化您的号码。

于 2012-10-28T15:47:17.883 回答