如何将字符串数字格式化为逗号和四舍五入?

什么是最好的方法来格式化下列数字是给我作为一个字符串?

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

我希望它是一个值为 1,000,500,000.57的 String

我怎样才能这样格式化它?

292155 次浏览

您可能需要查看 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));

将 String 转换为数字后,可以使用

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

或者

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

我已经创建了自己的格式化实用程序。它在处理格式以及提供许多特性方面非常快:)

它支持:

  • 逗号格式,例如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.23 M”作为输出。我也许可以添加十进制支持,但是没有看到它有太多用处,因此我不妨将其合并到一个 BigInteger 类型的类中,该类处理用于数学计算的压缩 char []数组。

第一个答案工作得很好,但是对于 ZERO/0,它将格式化为.00

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

你也可以使用下面的解决方案

public static String getRoundOffValue(double value){
DecimalFormat df = new DecimalFormat("##,##,##,##,##,##,##0.00");
return df.format(value);
}
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);
}

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

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

DecimalFormat 构造函数中的最后两个 # 符号也可以是0。

这也可以通过使用 String.format ()来实现,如果要在一个字符串中格式化多个数字,那么 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);

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

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

以下是实现这一目标的最简单方法:

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

产出: 10,987,655.88

考虑到这是 format number commas java的第一个谷歌搜索结果,这里有一个适用于那些使用整数而不关心小数的人的答案。

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

产出:

2,000,000