我如何格式化一个string数字以逗号和整数?

将下面的数字格式化为string的最佳方式是什么?

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

我希望这是一个值为1,000,500,000.57的string

我怎样才能格式化呢?

您可能要查看DecimalFormat类; 它支持不同的语言环境(例如:在一些国家,将被格式化为1.000.500.000,57 )。

您还需要将该string转换为数字,可以这样做:

 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) 

我已经创build了我自己的格式化工具。 这是非常快的处理格式,给你很多function:)

它支持:

  • 逗号格式化例如1234567变成1,234,567。
  • 前缀为“千(K),百万(M),十亿(B),十亿(T)”。
  • 精度为0到15。
  • 精确resize(意思是如果你想要6位数的精度,但只有3个可用的数字强迫它到3)。
  • 前缀降低(意思是如果你select的前缀太大,会降低到更合适的前缀)。

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

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

我也应该指出,这不处理十进制支持,但是对于整数值非常有用。 上面的例子会显示“1.23M”作为输出。 也许我可以添加十进制支持,但没有看到太多的用法,因为那样我就可以把它合并到一个BigInteger类中,它处理用于math计算的压缩char []数组。

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

  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); 

格式string“%,。2f” – “,”表示用逗号分隔的数字组,“.2”表示小数点后的两位数字。

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

 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); } 

你也可以使用下面的解决scheme –

 public static String getRoundOffValue(double value){ DecimalFormat df = new DecimalFormat("##,##,##,##,##,##,##0.00"); return df.format(value); } 

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

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

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

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

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

这是最简单的方法:

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

产量:10987655.88

这个类是为简单的印度价格格式

 public class Test { public static void main (String a[]){ System.out.println(priceFormatter("10023")); } /** * This method is to convert the price into Indian price * separator format * @param inputPrice * @return */ public static String priceFormatter(String inputPrice){ try { if(!isNumeric(inputPrice)){ return inputPrice; } // to check if the number is a decimal number String newPrice = "",afterDecimal = ""; if(inputPrice.indexOf('.') != -1){ newPrice = inputPrice.substring(0,inputPrice.lastIndexOf('.')); afterDecimal = inputPrice.substring(inputPrice.lastIndexOf('.')); }else{ newPrice = inputPrice; } int length = newPrice.length(); if (length < 4) { return inputPrice; } // to check whether the length of the number is even or odd boolean isEven = false; if (length % 2 == 0) { isEven = true; } // to calculate the comma index char ch[] = new char[length + (length / 2 - 1)]; if (isEven) { for (int i = 0, j = 0; i < length; i++) { ch[j++] = inputPrice.charAt(i); if (i % 2 == 0 && i < (length - 3)) { ch[j++] = ','; } } } else { for (int i = 0, j = 0; i < length; i++) { ch[j++] = inputPrice.charAt(i); if (i % 2 == 1 && i < (length - 3)) { ch[j++] = ','; } } } // conditional return based on decimal number check return afterDecimal.length() > 0 ? String.valueOf(ch) + afterDecimal : String.valueOf(ch); } catch(NumberFormatException ex){ ex.printStackTrace(); return inputPrice; } catch (Exception e) { e.printStackTrace(); return inputPrice; } } }