¿Cómo puedo formatear un número de serie para tener comas y ronda?

¿Cuál es la mejor forma de formatear el siguiente número que se me da como una Cadena?

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

Quiero que esto sea una cadena con el valor: 1,000,500,000.57

¿Cómo puedo formatearlo como tal?

Es posible que desee mirar la clase DecimalFormat ; admite diferentes configuraciones regionales (por ejemplo: en algunos países que se formatearán como 1.000.500.000,57 en 1.000.500.000,57 lugar).

También necesita convertir esa cadena en un número, esto se puede hacer con:

 double amount = Double.parseDouble(number); 

Muestra de código:

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

Una vez que haya convertido su Cadena en un número, puede usar

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

o

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

Esto también se puede lograr usando String.format (), que puede ser más fácil y / o más flexible si está formateando múltiples números en una cadena.

  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 el formato de cadena “% ,. 2f” – “,” significa grupos de dígitos separados con comas, y “.2” significa redondeado a dos lugares después del decimal.

Para referencia sobre otras opciones de formato, ver https://docs.oracle.com/javase/tutorial/java/data/numberformat.html

Creé mi propia utilidad de formateo. Lo cual es extremadamente rápido en el procesamiento del formato junto con muchas características 🙂

Es compatible con:

  • Formato de coma, por ejemplo, 1234567 se convierte en 1,234,567.
  • Prefijo con “Mil (K), Millones (M), Mil Millones (B), Trillón (T)”.
  • Precisión de 0 a 15.
  • Re-dimensionamiento de precisión (Significa que si desea una precisión de 6 dígitos, pero solo tiene 3 dígitos disponibles, lo fuerza a 3).
  • Disminución del prefijo (Significa que si el prefijo que eliges es demasiado grande, lo reduce a un prefijo más adecuado).

El código se puede encontrar aquí . Lo llamas así:

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

También debo señalar que esto no maneja el soporte decimal, pero es muy útil para valores enteros. El ejemplo anterior mostraría “1.23M” como salida. Probablemente podría agregar soporte decimal quizás, pero no vi demasiado uso para él, ya que entonces podría fusionar esto en un tipo de clase BigInteger que maneja matrices comprimidas [] 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); } 

también puedes usar la siguiente solución:

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

Puede hacer la conversión completa en una línea, usando el siguiente código:

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

Los dos últimos signos # en el constructor DecimalFormat también pueden ser 0s. De cualquier manera funciona.

Esta es la forma más sencilla de llegar:

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

salida: 10,987,655.88

La primera respuesta funciona muy bien, pero para ZERO / 0 formateará como .00

Por lo tanto, el formato #, ## 0.00 está funcionando bien para mí. Pruebe siempre diferentes números como 0/100 / 2334.30 y números negativos antes de implementar en el sistema de producción.

Esta clase es para el formateador de precios indio simple

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