Tengo algunos problemas para formatear los decimales de un doble. Si tengo un valor doble, por ejemplo, 4.0, ¿cómo formateo los decimales para que sean 4.00?
Tengo algunos problemas para formatear los decimales de un doble. Si tengo un valor doble, por ejemplo, 4.0, ¿cómo formateo los decimales para que sean 4.00?
Respuestas:
Una de las formas sería usar NumberFormat .
NumberFormat formatter = new DecimalFormat("#0.00");
System.out.println(formatter.format(4.0));
Salida:
4,00
Con Java 8, puede utilizar el format
método ..: -
System.out.format("%.2f", 4.0); // OR
System.out.printf("%.2f", 4.0);
f
se utiliza para el floating
valor en puntos.2
después de decimal denota, número de lugares decimales después .
Para la mayoría de las versiones de Java, puede utilizar DecimalFormat
: -
DecimalFormat formatter = new DecimalFormat("#0.00");
double d = 4.0;
System.out.println(formatter.format(d));
Utilice String.format :
String.format("%.2f", 4.52135);
Según los documentos:
La configuración regional siempre utilizada es la devuelta por
Locale.getDefault()
.
Usando String.format, puede hacer esto:
double price = 52000;
String.format("$%,.2f", price);
Observe la coma que hace que esto sea diferente de la respuesta de @ Vincent
Salida:
$52,000.00
Un buen recurso para formatear es la página oficial de Java sobre el tema.
Siempre puede usar el método estático printf from System.out
; luego, implementará el formateador correspondiente; esto ahorra mucho espacio en el que otros ejemplos requieren que lo haga.
Ex:
System.out.format("%.4f %n", 4.0);
System.out.printf("%.2f %n", 4.0);
Ahorra espacio en el montón, lo cual es una gran ventaja, sin embargo, tengo la opinión de que este ejemplo es mucho más manejable que cualquier otra respuesta, especialmente porque la mayoría de los programadores conocen la función printf de C (aunque Java cambia ligeramente la función / método).
out
es el PrintStream
.
double d = 4.0;
DecimalFormat nf = DecimalFormat.getInstance(Locale.ENGLISH);
System.out.println(nf.format("#.##"));
new DecimalFormat("#0.00").format(4.0d);
Un método alternativo es utilizar el setMinimumFractionDigits
método delNumberFormat
clase.
Aquí, básicamente, especifica cuántos números desea que aparezcan después del punto decimal.
Entonces, una entrada de 4.0
produciría4.00
, asumiendo que la cantidad especificada fuera 2.
Pero, si tu Double
entrada contiene más de la cantidad especificada, tomará la cantidad mínima especificada, luego agregará un dígito más redondeado hacia arriba / hacia abajo
Por ejemplo, 4.15465454
con una cantidad mínima de 2 especificada se producirá4.155
NumberFormat nf = NumberFormat.getInstance();
nf.setMinimumFractionDigits(2);
Double myVal = 4.15465454;
System.out.println(nf.format(myVal));
Hay muchas formas de hacer esto. Estos se dan a continuación:
Suponga que su número original se da a continuación:
double number = 2354548.235;
Usando NumberFormat:
NumberFormat formatter = new DecimalFormat("#0.00");
System.out.println(formatter.format(number));
Usando String.format:
System.out.println(String.format("%,.2f", number));
Usando DecimalFormat y patrón:
NumberFormat nf = DecimalFormat.getInstance(Locale.ENGLISH);
DecimalFormat decimalFormatter = (DecimalFormat) nf;
decimalFormatter.applyPattern("#,###,###.##");
String fString = decimalFormatter.format(number);
System.out.println(fString);
Usando DecimalFormat y patrón
DecimalFormat decimalFormat = new DecimalFormat("############.##");
BigDecimal formattedOutput = new BigDecimal(decimalFormat.format(number));
System.out.println(formattedOutput);
En todos los casos la salida será: 2354548.23
Nota :
Durante el redondeo, puede agregar RoundingMode
su formateador. A continuación, se muestran algunos modos de redondeo:
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;
Puede utilizar cualquiera de los métodos siguientes
Si esta usando java.text.DecimalFormat
DecimalFormat decimalFormat = NumberFormat.getCurrencyInstance();
decimalFormat.setMinimumFractionDigits(2);
System.out.println(decimalFormat.format(4.0));
O
DecimalFormat decimalFormat = new DecimalFormat("#0.00");
System.out.println(decimalFormat.format(4.0));
Si desea convertirlo en formato de cadena simple
System.out.println(String.format("%.2f", 4.0));
Todo el código anterior imprimirá 4.00
Funciona al 100%.
import java.text.DecimalFormat;
public class Formatting {
public static void main(String[] args) {
double value = 22.2323242434342;
// or value = Math.round(value*100) / 100.0;
System.out.println("this is before formatting: "+value);
DecimalFormat df = new DecimalFormat("####0.00");
System.out.println("Value: " + df.format(value));
}
}
Primera importación NumberFormat
. Luego agrega esto:
NumberFormat currencyFormatter = NumberFormat.getCurrencyInstance();
Esto le dará dos lugares decimales y pondrá un signo de dólar si se trata de moneda.
import java.text.NumberFormat;
public class Payroll
{
/**
* @param args the command line arguments
*/
public static void main(String[] args)
{
int hoursWorked = 80;
double hourlyPay = 15.52;
double grossPay = hoursWorked * hourlyPay;
NumberFormat currencyFormatter = NumberFormat.getCurrencyInstance();
System.out.println("Your gross pay is " + currencyFormatter.format(grossPay));
}
}
Puedes hacerlo de la siguiente manera:
double d = 4.0;
DecimalFormat df = new DecimalFormat("#.##");
System.out.print(df.format(d));
##
lugar de00
Sé que este es un tema antiguo, pero si realmente desea tener el punto en lugar de la coma, simplemente guarde su resultado como X, 00 en una cadena y luego simplemente cámbielo por un período para obtener el X.00
La forma más sencilla es usar reemplazar.
String var = "X,00";
String newVar = var.replace(",",".");
La salida será la X.00 que deseaba. Además, para que sea más fácil, puede hacerlo todo a la vez y guardarlo en una variable doble:
Double var = Double.parseDouble(("X,00").replace(",",".");
Sé que esta respuesta no es útil en este momento, pero tal vez alguien que consulte este foro esté buscando una solución rápida como esta.
String.format()
ojava.text.Format
.