Como posso formatar um número String para ter vírgulas e arredondar?

Qual é a melhor maneira de formatar o seguinte número que me é dado como uma String?

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

Eu quero que isso seja uma String com o valor: 1,000,500,000.57

Como posso formatá-lo como tal?

Você pode querer olhar para a class DecimalFormat ; ele suporta diferentes localidades (por exemplo, em alguns países que seriam formatados como 1.000.500.000,57 ).

Você também precisa converter essa string em um número, isso pode ser feito com:

 double amount = Double.parseDouble(number); 

Amostra de código:

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

Depois de converter sua String em um número, você pode usar

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

ou

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

Isso também pode ser feito usando String.format (), que pode ser mais fácil e / ou mais flexível se você estiver formatando vários números em uma cadeia.

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

Para a cadeia de formatos “%,. 2f” – “,” significa grupos de dígitos separados com vírgulas e “.2” significa arredondado para dois locais após o decimal.

Para referência sobre outras opções de formatação, consulte https://docs.oracle.com/javase/tutorial/java/data/numberformat.html

Eu criei meu próprio utilitário de formatação. Que é extremamente rápido no processamento da formatação, além de oferecer muitos resources 🙂

Suporta:

  • Formatação por vírgula Por exemplo, 1234567 se torna 1,234,567.
  • Prefixando com “Mil (K), Milhões (M), Bilhões (B), Trilhões (T)”.
  • Precisão de 0 a 15.
  • Precisão de redimensionamento (Significa se você quer precisão de 6 dígitos, mas tem apenas 3 dígitos disponíveis, o que força a 3).
  • Diminuição de prefixo (significa que se o prefixo escolhido for muito grande, ele diminui para um prefixo mais adequado).

O código pode ser encontrado aqui . Você chama assim:

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

Também devo salientar que isso não suporta o suporte decimal, mas é muito útil para valores inteiros. O exemplo acima mostraria “1.23M” como saída. Eu provavelmente poderia adicionar suporte decimal talvez, mas não vi muito uso para ele desde então eu poderia muito bem mesclar isso em um tipo BigInteger de class que lida com matrizes char charritas para cálculos matemáticos.

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

você também pode usar abaixo da solução –

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

Você pode fazer a conversão inteira em uma linha, usando o seguinte código:

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

Os dois últimos sinais # no construtor DecimalFormat também podem ser 0s. De qualquer maneira funciona.

Aqui está a maneira mais simples de chegar lá:

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

Produção: 10.987.655,88

A primeira resposta funciona muito bem, mas para ZERO / 0 irá formatar como .00

Por isso, o formato #, ## 0.00 está funcionando bem para mim. Sempre teste números diferentes, como 0/100 / 2334.30 e números negativos, antes de implantar no sistema de produção.

Esta class é para formatador de preço indiano simples

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