Java 在十进制数中添加逗号

Java 在十进制数中添加逗号,java,string,decimal,comma,Java,String,Decimal,Comma,我有一系列大十进制数(例如:123456.78)。我想添加逗号,使它们看起来像这样,123456.78,因此我将它们转换为字符串并使用以下代码: private static String insertCommas(String str) { if(str.length() < 4){ return str; } return insertCommas(str.substring(0, str.length() - 3)) + "

我有一系列大十进制数(例如:
123456.78
)。我想添加逗号,使它们看起来像这样,
123456.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());
}
私有静态字符串插入命令(字符串str){
如果(str.length()<4){
返回str;
}
返回insertCommas(str.substring(0,str.length()-3))+
"," +         
str.substring(str.length()-3,str.length());
}
这样做。问题是,当我运行
insertCommas(str)
时,它会打印
123456.78
。我想不出一个办法来防止逗号放在小数点之前

--

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

我也尝试过
十进制(“#,###0.00”)
和类似的类型,但当数字达到某一点时,它们会被替换为零,使我丢失有关数字的信息


帮助?

看看Java教程。这将教会您如何在打印或转换为字符串时格式化数字。

有一种更简单的方法。您只需使用
SimpleCIMalFormat

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));
}
您可以在此处学习新模式和更多内容:


希望这对您有所帮助:)

如果您坚持让函数正常工作,您可以使用以下方法:

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]) : "");
}
私有静态字符串插入命令(字符串str){
如果(str.length()<4){
返回str;
}
字符串[]标记=str.split(“[.]”);
返回insertCommas(标记[0]。子字符串(0,标记[0]。长度()-3))+
"," +
str.substring(标记[0].length()-3,标记[0].length())+
((tokens.length>1)?(“+tokens[1]):”;
}

晚会有点晚了,但是如果你把十进制数转换成字符串,你可以用一个简单的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;
}

希望对您有所帮助。

如果这是家庭作业或面试问题,可以,但请指定。数字格式师可以按您的要求执行。问题是它必须是灵活的:它必须适用于123213432322.65和1234.17,但这是我的错,因为我没有指定,我编辑了我的原始问题。它是灵活的。通过使用#,##0.00,您将获得123456789.00。如果将图案设置为#,##0000.00,则也可以设置为123456789.00,但不能设置为123.00,因为它将转换为0123.00。请阅读API的模式部分。你应该在那里找到你需要的东西。包括前缀,如“$”或“USD”,不幸的是,它不是很灵活,数字377789318629571624960.00被转换成数字377789318629571600000.00(是的,它的精确性非常重要)我已经更新了我的答案。我忘了你需要的是
BigDecimal
而不是
double
。我用
1234567891011213141516171819.20
测试了我的答案,并得出了
1234567891011213141516171819.20
作为答案。我尝试了你的代码,但由于某些原因,它对大数字不起作用。你尝试了什么数字?我用给出的数字进行了测试:“12345.78”我把数字1342177.27放在这里,我想问题是我忽略了一个事实,那就是它在一个巨大的for循环中,所以有大量的大数字需要处理。谢谢你的评论。我编辑代码以使其适用于大数字。已经在那里了。我试过了,但最后还是留下了一堆零值