163

将以下数字格式化为字符串的最佳方法是什么?

String number = "1000500000.574" //assume my value will always be a String

我希望这是一个具有以下值的字符串:1,000,500,000.57

我该如何格式化它?

4

10 回答 10

282

您可能想查看DecimalFormat课程;它支持不同的语言环境(例如:在某些国家/地区会被格式化1.000.500.000,57)。

您还需要将该字符串转换为数字,这可以通过以下方式完成:

double amount = Double.parseDouble(number);

代码示例:

String number = "1000500000.574";
double amount = Double.parseDouble(number);
DecimalFormat formatter = new DecimalFormat("#,###.00");

System.out.println(formatter.format(amount));
于 2010-09-08T23:40:13.773 回答
58

这也可以使用 String.format() 来完成,如果您在一个字符串中格式化多个数字,这可能会更容易和/或更灵活。

    String number = "1000500000.574";
    Double numParsed = Double.parseDouble(number);

    System.out.println(String.format("The input number is: %,.2f", numParsed));
    // Or
    String numString = String.format("%,.2f", numParsed);

对于格式字符串“%,.2f” - “,”表示用逗号分隔的数字组,“.2”表示四舍五入到小数点后两位。

有关其他格式选项的参考,请参阅https://docs.oracle.com/javase/tutorial/java/data/numberformat.html

于 2016-10-11T18:35:13.640 回答
44

将字符串转换为数字后,您可以使用

// format the number for the default locale
NumberFormat.getInstance().format(num)

或者

// format the number for a particular locale
NumberFormat.getInstance(locale).format(num)
于 2010-09-08T23:50:32.620 回答
44

鉴于这是 Google 结果的第一名format number commas java,这里的答案适用于使用整数且不关心小数的人。

String.format("%,d", 2000000)

输出:

2,000,000
于 2018-09-21T15:23:37.207 回答
13

我创建了自己的格式化实用程序。它在处理格式方面非常快,并为您提供了许多功能:)

它支持:

  • 逗号格式例如 1234567 变为 1,234,567。
  • 以“千(K),百万(M),十亿(B),万亿(T)”为前缀。
  • 精度为 0 到 15。
  • 精确调整大小(意味着如果你想要 6 位精度,但只有 3 个可用数字,它会强制它为 3)。
  • 前缀降低(意味着如果您选择的前缀太大,它会将其降低到更合适的前缀)。

代码可以在这里找到。你这样称呼它:

public static void main(String[])
{
   int settings = ValueFormat.COMMAS | ValueFormat.PRECISION(2) | ValueFormat.MILLIONS;
   String formatted = ValueFormat.format(1234567, settings);
}

我还应该指出这不处理十进制支持,但对整数值非常有用。上面的示例将显示“1.23M”作为输出。我可能可能会添加十进制支持,但从那时起我没有看到它有太多用处,我不妨将它合并到处理压缩 char[] 数组以进行数学计算的 BigInteger 类型的类中。

于 2012-10-27T19:01:20.490 回答
6

您也可以使用以下解决方案

public static String getRoundOffValue(double value){
    DecimalFormat df = new DecimalFormat("##,##,##,##,##,##,##0.00");
    return df.format(value);
}
于 2014-05-28T10:49:59.367 回答
6
public void convert(int s)
{
    System.out.println(NumberFormat.getNumberInstance(Locale.US).format(s));
}

public static void main(String args[])
{
    LocalEx n=new LocalEx();
    n.convert(10000);
}
于 2014-07-29T16:45:07.677 回答
4

您可以使用以下代码在一行中完成整个转换:

String number = "1000500000.574";
String convertedString = new DecimalFormat("#,###.##").format(Double.parseDouble(number));

DecimalFormat 构造函数中的最后两个# 符号也可以是0。无论哪种方式都有效。

于 2016-02-27T07:47:37.837 回答
3

第一个答案效果很好,但对于 ZERO / 0 它将格式化为 .00

因此格式 #,##0.00 对我来说效果很好。在部署到生产系统之前,请始终测试不同的数字,例如 0 / 100 / 2334.30 和负数。

于 2014-02-26T22:39:48.587 回答
3

这是到达那里的最简单方法:

String number = "10987655.876";
double result = Double.parseDouble(number);
System.out.println(String.format("%,.2f",result)); 

产量:10,987,655.88

于 2017-05-07T06:53:38.180 回答