将逗号添加到十进制数

Posted

技术标签:

【中文标题】将逗号添加到十进制数【英文标题】:adding commas to decimal numbers 【发布时间】:2012-10-28 15:38:22 【问题描述】:

我有一系列 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") 和类似类型,但是当数字达到某个点时,它们会被零替换,这让我失去了有关数字的信息。

帮助?

【问题讨论】:

如果这是作业或面试问题,那很好,但请说明。 NumberFormatter 可以满足您的要求。 docs.oracle.com/javase/1.4.2/docs/api/javax/swing/text/… 【参考方案1】:

有一种更简单的方法可以做到这一点。你只需要使用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

希望这会有所帮助:)

【讨论】:

问题在于它必须灵活:它必须适用于 123,213,432,322.65 和 1,234.17 但是我没有指定是我的错,我编辑了我原来的问题。 它是灵活的。通过使用 #,##0.00,您将获得 123,456,789.00。如果将模式设置为 #,##0,000.00,您也可以拥有 123,456,789.00,但不能拥有 123.00,因为它将转换为 0,123.00。请阅读 API 的模式部分。你应该在那里找到你需要的东西。包括前缀,例如“$”或“USD” 不幸的是,它不是很灵活,数字 377,789,318,629,571,624,960.00 被转换为数字 377,789,318,629,571,600,000.00(是的,它的精确性非常重要) 我已经更新了我的答案。我忘记了你需要BigDecimal 而不是double。我已经用12345678910111213141516171819.20 测试了我的答案,并想出了12,345,678,910,111,213,141,516,171,819.20 作为答案。【参考方案2】:

查看 Java 的 Formatting Numeric Print Output 教程。这将教您如何在打印或转换为字符串期间格式化您的号码。

【讨论】:

已经去过了。我试过了,但它在最后留下了一堆零更大的数字【参考方案3】:

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

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]) : "");

【讨论】:

我试过你的代码,但由于某种原因它不适用于大量数据。 你试过什么号码?我用给定的数字进行了测试:'12345.78' 我把数字 1342177.27 我想问题是我忽略了它在一个巨大的 for 循环内部的事实,所以有大量的大数字正在处理。 感谢您的评论。我编辑代码以使其适用于大数字。【参考方案4】:

聚会有点晚了,但是如果将小数转换为字符串,则可以使用简单的 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;

希望对您有所帮助。

【讨论】:

以上是关于将逗号添加到十进制数的主要内容,如果未能解决你的问题,请参考以下文章

Google表格十进制数,如何删除逗号并添加零

用逗号代替点的十进制数(php 和 sql)

正则表达式带逗号的十进制数

如何在laravel中格式化为包含逗号和点的十进制数?

SwiftUI中如何将带逗号的十进制数转换为小数(Point)?

VBA:为从 SQL Server 数据库中选择的十进制数获取逗号分隔符而不是点