Respuestas:
String.format("%1$,.2f", myDouble);
String.format usa automáticamente la configuración regional predeterminada.
%1, %2y así sucesivamente se puede utilizar para reordenar la salida en función del índice de sus argumentos de entrada. Mira esto . Puede omitir el índice y el formateador asumirá el orden predeterminado.
String.format("%4.3f" , x) ;
Significa que necesitamos un total de 4 dígitos en ans, de los cuales 3 deben ser después del decimal. Y f es el especificador de formato de doble. x significa la variable para la que queremos encontrarlo. Trabajó para mi . . .
String.format("%014.3f" , 58.656565)-> 0000000058,657: 14 símbolos en total: 8 ceros y 5 números y 1 coma. Entonces, en este caso, número 14 significa el número total de símbolos (los adicionales se reemplazan con cero a la izquierda, podrían ir sin, luego se reemplazarían con espacio) en la cadena de resultados . La .3parte es completamente independiente aquí.
String.format("%014.3f" , 58.656565)-> 58,657. Lo tomo porque la preferencia va a la .3fparte: primero imprime el número con 3 decimales y luego, si quedan símbolos , imprime los espacios iniciales (o ceros / lo que sea). En este caso, el número es 2 + 3 + 1 = 6 símbolos y solo queríamos imprimir 4, por lo que ciertamente no hay espacios adicionales.
Si desea formatearlo con símbolos establecidos manualmente, use esto:
DecimalFormatSymbols decimalFormatSymbols = new DecimalFormatSymbols();
decimalFormatSymbols.setDecimalSeparator('.');
decimalFormatSymbols.setGroupingSeparator(',');
DecimalFormat decimalFormat = new DecimalFormat("#,##0.00", decimalFormatSymbols);
System.out.println(decimalFormat.format(1237516.2548)); //1,237,516.25
Sin embargo, se prefiere el formato basado en la configuración regional.
código extraído de este enlace ;
Double amount = new Double(345987.246);
NumberFormat numberFormatter;
String amountOut;
numberFormatter = NumberFormat.getNumberInstance(currentLocale);
amountOut = numberFormatter.format(amount);
System.out.println(amountOut + " " +
currentLocale.toString());
El resultado de este ejemplo muestra cómo varía el formato del mismo número con la configuración regional:
345 987,246 fr_FR
345.987,246 de_DE
345,987.246 en_US
public class MainClass {
public static void main(String args[]) {
System.out.printf("%d %(d %+d %05d\n", 3, -3, 3, 3);
System.out.printf("Default floating-point format: %f\n", 1234567.123);
System.out.printf("Floating-point with commas: %,f\n", 1234567.123);
System.out.printf("Negative floating-point default: %,f\n", -1234567.123);
System.out.printf("Negative floating-point option: %,(f\n", -1234567.123);
System.out.printf("Line-up positive and negative values:\n");
System.out.printf("% ,.2f\n% ,.2f\n", 1234567.123, -1234567.123);
}
}
E imprima:
3 (3) +3 00003
Formato de punto flotante predeterminado: 1234567,123000 Punto
flotante con comas: 1.234.567,123000
Valor predeterminado de punto
flotante negativo : -1.234.567,123000 Opción de punto flotante negativo: (1.234.567, 123000)Alineación de valores positivos y negativos:
1.234.567,12
-1.234.567,12
Hay muchas formas de hacer esto. Esos se dan a continuación:
Suponga que su número original se muestra a continuación: número doble = 2354548.235;
Uso NumberFormaty modo de redondeo
NumberFormat nf = DecimalFormat.getInstance(Locale.ENGLISH);
DecimalFormat decimalFormatter = (DecimalFormat) nf;
decimalFormatter.applyPattern("#,###,###.##");
decimalFormatter.setRoundingMode(RoundingMode.CEILING);
String fString = decimalFormatter.format(number);
System.out.println(fString);
Usando el formateador de cadenas
System.out.println(String.format("%1$,.2f", number));
En todos los casos el resultado será: 2354548.24
Nota :
Durante el redondeo puede agregar RoundingModesu formateador. Aquí hay algunos modos de redondeo dados a continuación:
decimalFormat.setRoundingMode(RoundingMode.CEILING);
decimalFormat.setRoundingMode(RoundingMode.FLOOR);
decimalFormat.setRoundingMode(RoundingMode.HALF_DOWN);
decimalFormat.setRoundingMode(RoundingMode.HALF_UP);
decimalFormat.setRoundingMode(RoundingMode.UP);
Aquí están las importaciones :
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.Locale;
Utilizar DecimalFormat
NumberFormat nf = DecimalFormat.getInstance(Locale.ENGLISH);
DecimalFormat decimalFormatter = (DecimalFormat) nf;
decimalFormatter.applyPattern("#,###,###.##");
String fString = decimalFormatter.format(myDouble);
System.out.println(fString);
String.format(Locale.GERMAN, "%1$,.2f", myDouble);