example - number format java
¿Cómo utilizar DecimalFormat de Java para el formato de moneda "inteligente"? (9)
¿Tiene que usar DecimalFormat
?
Si no, parece que lo siguiente debería funcionar:
String currencyString = NumberFormat.getCurrencyInstance().format(currencyNumber);
//Handle the weird exception of formatting whole dollar amounts with no decimal
currencyString = currencyString.replaceAll("//.00", "");
Me gustaría usar el DecimalFormat de Java para formatear dobles de esta manera:
#1 - 100 -> $100
#2 - 100.5 -> $100.50
#3 - 100.41 -> $100.41
Lo mejor que se me ocurre hasta ahora es:
new DecimalFormat("''$''0.##");
Pero esto no funciona para el caso # 2, y en su lugar produce "$ 100.5"
Editar:
Muchas de estas respuestas solo están considerando los casos # 2 y # 3 y no se dan cuenta de que su solución hará que # 1 formatee 100 como "$ 100.00" en lugar de solo "$ 100".
Intenta usar
DecimalFormat.setMinimumFractionDigits(2);
DecimalFormat.setMaximumFractionDigits(2);
Puede intentar usar dos objetos DecimalFormat
diferentes según la condición de la siguiente manera:
double d=100;
double d2=100.5;
double d3=100.41;
DecimalFormat df=new DecimalFormat("''$''0.00");
if(d%1==0){ // this is to check a whole number
DecimalFormat df2=new DecimalFormat("''$''");
System.out.println(df2.format(d));
}
System.out.println(df.format(d2));
System.out.println(df.format(d3));
Output:-
$100
$100.50
$100.41
Puede marcar "es un número entero o no" y elegir el formato de número necesario.
public class test {
public static void main(String[] args){
System.out.println(function(100d));
System.out.println(function(100.5d));
System.out.println(function(100.42d));
}
public static String function(Double doubleValue){
boolean isWholeNumber=(doubleValue == Math.round(doubleValue));
DecimalFormatSymbols formatSymbols = new DecimalFormatSymbols(Locale.GERMAN);
formatSymbols.setDecimalSeparator(''.'');
String pattern= isWholeNumber ? "#.##" : "#.00";
DecimalFormat df = new DecimalFormat(pattern, formatSymbols);
return df.format(doubleValue);
}
}
Te dará exactamente lo que quieres:
100
100.50
100.42
Puede utilizar el siguiente formato:
DecimalFormat dformat = new DecimalFormat ("$ #. ##");
Sé que es demasiado tarde. Sin embargo los siguientes me funcionaron:
DecimalFormatSymbols otherSymbols = new DecimalFormatSymbols(Locale.UK);
new DecimalFormat("/u00A4#######0.00",otherSymbols).format(totalSale);
/u00A4 : acts as a placeholder for currency symbol
#######0.00 : acts as a placeholder pattern for actual number with 2 decimal
places precision.
Espero que esto ayude a quienquiera que lea esto en el futuro :)
Tratar
new DecimalFormat("''$''0.00");
Editar:
Lo intenté
DecimalFormat d = new DecimalFormat("''$''0.00");
System.out.println(d.format(100));
System.out.println(d.format(100.5));
System.out.println(d.format(100.41));
y consiguió
$100.00
$100.50
$100.41
Utilice NumberFormat:
NumberFormat n = NumberFormat.getCurrencyInstance(Locale.US);
double doublePayment = 100.13;
String s = n.format(doublePayment);
System.out.println(s);
Además, no use dobles para representar valores exactos. Si está utilizando valores de moneda en algo como un método de Monte Carlo (donde los valores no son exactos de todos modos), se prefiere el doble.
Ver también: Escribir programas Java para calcular y formatear moneda.
printf también funciona.
Ejemplo:
doble anyNumber = 100; printf ("El valor es% 4.2f", anyNumber);
Salida:
El valor es 100.00.
4.2 significa forzar que el número tenga dos dígitos después del decimal. El 4 controla cuántos dígitos a la derecha del decimal.