jueves, 10 de diciembre de 2015

Convertir a formato moneda (euros/céntimos) en Java

Java
Vamos a mostrar como formatear un número cualquiera al formato moneda, más concretamente a euros (x,xx €). Veamos un ejemplo:

import java.text.NumberFormat;;
public class Principal {

    public static void main(String[] args) {
        double euros = 0.4556456;
        NumberFormat formatter = NumberFormat.getCurrencyInstance();
        System.out.println(formatter.format(euros));
    }
}

La salida será:
0,46

Cuando llamamos a NumberFormat.getCurrencyInstance(); lo que se hace es crear el formateador en función del objeto Locale que está utilizando Java. Al estar en España, nos lo muestra en euros. ¿Pero qué pasa si queremos mostrarlo por ejemplo en dólares americanos?. Debemos definir el objeto Locale correspondiente a Estados Unidos, como se muestra a continuación:
import java.text.NumberFormat;
import java.util.Locale;

public class Principal {
    public static void main(String[] args) {
        double dolares = 0.4556456;

        Locale usa = new Locale("us", "US");
        NumberFormat formatter = NumberFormat.getCurrencyInstance(usa);
        System.out.println(formatter.format(dolares));
    }
}

En este caso la salida será:
USD 0.46

Si necesitas definir otra constante de idioma para crear el objeto Locale, puedes ver todos las disponibles aquí:
http://docs.oracle.com/javase/7/docs/api/java/util/Locale.html .

Por tanto, gracias a NumberFormat, no tenemos que definir un formateador ya que por sí solo según el Locale definido, es capaz de darle formato a los números y mostrar el nombre de la moneda.


Fuentes:

http://www.avajava.com/tutorials/lessons/how-do-i-use-numberformat-to-format-currencies.html




miércoles, 9 de diciembre de 2015

Generador de clases Java desde JSON

JSON
Es muy probable que alguna vez tengáis que trabajar con JSON desde Java, si no lo habéis hecho ya. Como seguramente ya sepáis, se trata de un formato de intercambio de datos que cada día se está volviendo más popular. Pues bien, la herramienta que os mostraré os facilitará tremendamente las cosas.

Si el esquema del JSON es sencillo, osea, que tenga tres o cuatro campos, podréis generar las clases manualmente. El problema viene cuando dicho esquema es bastante complejo y extenso. Aquí es donde un generador de clases nos ahorrará mucho trabajo. El que recomiendo es jsonschema2pojo, que tiene además la ventaja de que puede utilizarse desde un navegador y por tanto no es necesario instalar nada. La URL es http://www.jsonschema2pojo.org/ .

Una vez que estemos en la dicha web, lo primero que tenemos que hacer es copiar el código JSON resultante de la consulta (aunque también podríamos usar el esquema JSON) en el cuadro de texto que hay habilitado para ello. Posteriormente hay que introducir los campos “Package” y “Class name” deseados, marcar en “Source type” la opción “JSON” y en “Annotation style” marcar “None”. A continuación marcaremos las opciones que deseemos para la generación de las clases, que en mi caso son las siguientes:

  • Generate builder methods
  • Use double numbers
  • Include getters and setters
  • Include constructors
  • Allow additional properties
Ya sólo nos queda pulsar en “Preview” para previsualizar el resultado y finalmente en “Jar” para descargarnos el archivo jar con las clases generadas. Hay que tener en cuenta que Chrome puede bloquear este tipo de archivos jar y no permitir descargarlos por cuestiones de seguridad. Firefox sí lo permite, así que es el navegador que recomiendo.

NOTA: Antes de pegar el código JSON en jsonschema2pojo puede ser interesante validarlo y formatearlo. Para ello yo utilizo jsonformatter: https://jsonformatter.curiousconcept.com/

Espero que os sea de utilidad. Para plantear cualquier duda, podéis utilizar los comentarios.




viernes, 4 de diciembre de 2015

Día de la semana en español con Java

Java
Siguiendo con los post dedicados a fechas, en este artículo se explicará cómo obtener el día de la semana dada una fecha en concreto. Supongamos que nos dan un String con la fecha en formato año-mes-día. Lo primero que habría que hacer sería trocear la cadena:

    String fecha = "2015-11-19";
    StringTokenizer st = new StringTokenizer(fecha, "-");
    String año = st.nextToken(); 
    String mes = st.nextToken(); 
    String dia = st.nextToken();

Posteriormente creamos el objeto Calendar y mostramos el día de semana, que corresponderá al campo DAY_OF_WEEK del objeto Calendar:
    Calendar cal = GregorianCalendar.getInstance(); 
    cal.set(Integer.parseInt(año), Integer.parseInt(mes) - 1 , Integer.parseInt(dia)); 
    System.out.println(cal.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.LONG, new Locale("ES")));

Aquí tenemos que tener en cuenta varios aspectos:
  • El número de mes empieza en 0, correspondiendo el 0 a Enero, el 1 a Febrero, el 2 a Marzo, … Por eso hacemos mes-1 al pasar el parámetro mes.
  • Hemos definido el idioma español mediante new Locale (“ES”). Podemos consultar otras constantes para definir el lenguaje aquí: http://docs.oracle.com/javase/7/docs/api/java/util/Locale.html .
  • El día de semana se muestra en formato largo, ya que lo hemos indicado en Calendar.LONG . Si lo queremos en formato corto, lo sustituiremos por Calendar.SHORT.
  • Los parámetros año, mes y día los hemos convertido de String a int mediante Integer.parseInt .

Como siempre, podéis utilizar los comentarios para plantear vuestras dudas.




Felinfo: Java, Linux, Virtualización. Open Source.  ©Template Blogger Green by Dicas Blogger .

TOPO