Introducción
Contenido
La moneda es una parte muy importante de nuestro mundo moderno. Por lo tanto, es igualmente importante para nosotros poder expresarlo correctamente en Java.
En este tutorial, veremos cómo formatear números como cadenas de moneda en Java.
Número de formato como cadena de moneda
A continuación, le mostramos cómo puede formatear fácilmente un número, como un double
en una cadena de moneda:
double currencyAmount = 1500.00;
// Create a new Locale
Locale usa = new Locale("en", "US");
// Create a Currency instance for the Locale
Currency dollars = Currency.getInstance(usa);
// Create a formatter given the Locale
NumberFormat dollarFormat = NumberFormat.getCurrencyInstance(usa);
// Format the Number into a Currency String
System.out.println(dollars.getDisplayName() + ": " + dollarFormat.format(currencyAmount));
Si ejecutamos este código, resultará en:
US Dollar: $1,500.00
Formatear números en diferentes monedas implica algunas clases de Java. Nuestro ejemplo hizo uso de la Locale
y Currency
clases de la java.util
paquete. Además, usamos el NumberFormat
clase, que se puede encontrar en la java.text
paquete.
Profundicemos en estas clases y escribamos un método que formatee nuestro número en múltiples monedas, dependiendo de una entrada.
La clase local
Cada Locale
El objeto expresa una región geopolítica e incluye información como el idioma y la ubicación. Los países tienen formas únicas de expresar moneda. En lugar de tener que formatear manualmente cada moneda de forma diferente, utilizando Locale
Los objetos nos permiten automatizar este proceso.
Para crear un nuevo Locale
object, podemos usar uno de los tres constructores disponibles:
Locale(String language);
Locale(String language, String country);
Locale(String language, String country, String variant);
Sin embargo, tenga en cuenta que String
los parámetros de los constructores no pueden ser arbitrarios. Puede encontrar una lista completa de todas las configuraciones regionales admitidas en Java 8 aquí.
Ahora creemos un ejemplo Locale
objetos. Haremos referencia a estos más adelante cuando estemos creando el método real para imprimir moneda:
Locale usa = new Locale("en", "US");
Locale germany = new Locale("de", "DE");
Locale japan = new Locale("jp", "JP");
Dado que estamos trabajando con moneda, la primera String
El parámetro, idioma, dictará el formato del valor de la moneda (ej. 1,000,000.00 o 1,000,000,00). El segundo String
parámetro, región, determinará qué signo de moneda se utiliza (por ejemplo, $ o ¥).
La clase de moneda
La segunda clase que debemos comprender es la Currency
clase. Cada Currency
El objeto representa una moneda mundial. Queremos obtener una moneda dada nuestra Locale
, entonces usaremos el siguiente método:
Currency.getInstance(Locale locale);
Esto devolverá el correspondiente Currency
instancia para el especificado Locale
parámetro. Entonces, usando el Locale
objetos que creamos anteriormente, esto es lo que haremos:
Currency dollars = Currency.getInstance(usa);
Currency euros = Currency.getInstance(germany);
Currency yen = Currency.getInstance(japan);
Ahora que hemos creado nuestros tres Currency
instancias, podemos pasar a nuestra siguiente clase.
La clase NumberFormat
los NumberFormat
La clase tiene métodos para formatear números basados en configuraciones regionales. Los países tienen diferentes formas de agrupar números. Por ejemplo, mil se pueden representar como «1000», «1000», «1000» y otras variaciones.
Usaremos el NumberFormat.getCurrencyInstance(Locale l)
método. Este método devuelve un NumberFormat
objeto que corresponde al Locale
parámetro especificado. Así es como lo usaremos en nuestro método:
NumberFormat dollarFormat = NumberFormat.getCurrencyInstance(usa);
NumberFormat eurosFormat = NumberFormat.getCurrencyInstance(germany);
NumberFormat yenFormat = NumberFormat.getCurrencyInstance(japan);
Creación de un método para imprimir un número como moneda
Ahora que hemos aprendido sobre las tres clases necesarias para este programa, podemos comenzar a escribir el método real para imprimir un double
con formato de moneda.
También aceptaremos una Cadena, especificando en qué moneda nos gustaría imprimirla:
public static void printCurrency(double currencyAmount, String outputCurrency) {
Locale locale;
if (outputCurrency.equals("Yen")) {
locale = new Locale("jp", "JP");
} else if(outputCurrency.equals("Euros")) {
locale = new Locale("de", "DE");
} else if (outputCurrency.equals("Dollars")) {
locale = new Locale("en", "US");
} else {
locale = new Locale("en", "US");
}
Currency currency = Currency.getInstance(locale);
NumberFormat numberFormat = NumberFormat.getCurrencyInstance(locale);
System.out.println(currency.getDisplayName() + ": " + numberFormat.format(currencyAmount));
}
}
Probemos este método llamándolo y pasando los argumentos apropiados:
printCurrency(1000000.00, "Yen");
printCurrency(1000000.00, "Dollars");
printCurrency(1000000.00, "Euros");
Esto resulta en:
Japanese Yen: JPY 1,000,000
US Dollar: $1,000,000.00
Euro: 1.000.000,00 €
Para este ejemplo, usamos un double
e impreso como moneda con el formato adecuado. Otros tipos de números también funcionarían, pero recomendamos seguir con double
para valores de moneda.
Conclusión
En este artículo, aprendimos un poco sobre Locale
, Currency
y NumberFormat
clases. Luego aplicamos este conocimiento en un método que nos permitió formatear e imprimir correctamente un double
como moneda.