Posted on 13-02-2008
Filed Under (Java, Programación) by galifate

Estos es un problemilla que te puede pasar parseando un String que representa un BigDecimal en Java.

La típica entrada de texto, simple en apariencia, te puede dar por culo un buen rato si intentas recuperar números decimales.

Una entrada como “1,8″ la puedes interpretar como una representación en String de un BigDecimal. Entonces, si vas a saco puedes pensar que lo suyo es hacer tal que así:

BigDecimal numerito = new BigDecimal("1,8");

Lo malo es que 1,8 no tiene sentido como número para los “anglos”, por lo que habrá que reformatear para obtener un “1.8″. Para eso hay que hacer un NumberFormat con el Locale español:

Locale locale = new Locale("es", "ES");
NumberFormat nf = NumberFormat.getInstance(locale);

Ahora que tenemos el “formateador” podemos parsear el numero:

Number numero = nf.parse("1,8");

Ahora podría pensar que con numero.doubleValue() te puedes quedar tan ancho pero no exactamente. El BigDecimal que obtienes con new BigDecimal(numero.doubleValue()) es el siguiente:

1.8000000000000000444089209850062616169452667236328125

¿Por que narices sale eso a partir de un 1,8? Pues ni puta idea, pero pasemos de eso. Yo quiero un número que sea un 1,8 y lo puedo obtener así:

new BigDecimal(numero.toString())

Y eso es todo. Una chorrada pero que te puede tocar las narices sobre manera, sobretodo si tienes que meter el valor ese en un campo de la base de datos que puede que no esté dimensionado para albergar el chorro de arriba.

Discutir en el foro (0)

(0) Comments    Read More   
Posted on 15-10-2007
Filed Under (Java, Programación) by galifate

Pues yo sigo poniendo articulitos traducidos por el que os escribe. Son pildorillas de información técnica sobre tecnologías (Java) que creo que van bien para saber que existen y para qué sirven. Esta vez es un artículo sobre las annotations en aplicaciones web, que podréis encontrar en Enterprise Tech Tips de Sun y que está escrito por Shing Wai Chan.

Bueno, vamos a empezar con Using Annotations in Web Applications.

La quinta versión de Java EE (Enterprise Edition) introdujo las llamadas “annotations”, una forma de simplificar el desarrollo y configuración de aplicaciones empresariales. En el artículo Using Security Annotations in Enterprise Beans, publicado el 31 de marzo pasado, se mostró como usar las “anotaciones” para simplificar el desarrollo de aplicaciones seguras que usan enterprise beans. Algunas de las annotations de Java EE 5 son específicar para las aplicaciones web. Ejemplos de este tipo son @Resource, @EJB, y @WebServiceRef. Otras anotaciones, como @RunAs y @DeclareRoles, están relacionados con la seguridad. Las anotaciones que se relacionan con la seguridad fueron presentados en la “propina” Using Security Annotations in Enterprise Beans.

Read the rest of this entry »

Discutir en el foro (0)

(1) Comment    Read More   
Posted on 12-09-2007
Filed Under (Java, Programación) by galifate

Aquí tenemos un artículo de ejemplo de uso, en una aplicación web, de las tecnologías JSF, Spring 2.0 y Java Persistence. A continuación, a modo de práctica de inglés técnico y para no desconectarme demasiado de las tecnologías web java, puesto que cada vez programo menos, os pongo una traducción y tal. El articulo está sacado del blog de Carol McDonald, dentro de Java.net.

A modo de mostrar el uso de JSF, Spring 2.0 y Java Persistence en Glassfish, la autora ha montado una aplicación de ejemplo que consiste en paginación de conjuntos de datos sobre un catálogo de una tienda.

Paginación de Conjuntos de Datos en una Aplicación de Ejemplo usando las APIs de JSF, Spring 2.0 y Java Persistence en Glassfish

Esta aplicación de ejemplo de un catálogo de una tienda demuestra el uso de JavaServer Faces, la nueva API de Java Persistence, y Spring 2.0 para implementar la paginación. La autora cogió el ejemplo Pagination of Data Sets in a Sample Application using JSF, Catalog Facade Stateless Session, and Java Persistence APIs y lo modificó ligeramente para usar Spring Bean en lugar de los beans de sesion sin estado de EJB 3.0. Si se comparan los dos ejemplos, verás que el código es casi el mismo, la principal diferencia es la configuración en xml extra para Spring, lo cual no es fácil.

Descarga el código de la aplicación de ejemplo SpringJPA

Nótese: la autora modificó la parte de integración de Spring JSF en esta aplicación para usar org.springframework.web.jsf.DelegatingVariableResolver en lugar del Managed Bean ServiceLocator para obtener una referencia al CatalogService Spring Bean desde el application context de Spring.
Read the rest of this entry »

Discutir en el foro (0)

(8) Comments    Read More   
Posted on 10-08-2007
Filed Under (Java, Programación) by galifate

Pues nada, traduciendo chuminadas. Aquí lo que tenemos es un articulito de CoreJavaTechTips en el que, para aquellos que estamos liados con el java, se recomienda el uso de la clase BigDecimal para representar cantidades de dinerito, en lugar de usar un tipo primitivo como double. Esta tonteria puede ser útil para aquellos que empiezan en el mundillo, aunque para los que ya llevamos un tiempo está un poco pasado. De todas formas sirve para rellenar.

El artículo está hecho por un tal John Zukowski y dice algo así…

Si curras con número en coma flotante puedes usar tipos primitivos como el double, pero si tienes que aplicarle operaciones como si a un importe le añadieras el IVA, por ejemplo, ten cuidadito. Éste tipo de operaciones puede que no te den el resultado correcto, pues sólo te puede dar el valor que se pueda almacenar en un número binario y tal. A continuación nos dan un ejemplo.

Tenemos un programa “Calc” con el que empezamos con un montante de 100.05$, y nos dan un 10% de descuento antes de aplicarnos un 5% de impuestos los jodíos. Para ver el resultado, el pogramita usa la clase NumberFormat para formatear el resultado para mostrar el dinerito.

import java.text.NumberFormat;

public class Calc {
  public static void main(String args[]) {
    double amount = 100.05;
    double discount = amount * 0.10;
    double total = amount - discount;
    double tax = total * 0.05;
    double taxedTotal = tax + total;
    NumberFormat money = NumberFormat.getCurrencyInstance();
    System.out.println("Subtotal : "+ money.format(amount));
    System.out.println("Discount : " + money.format(discount));
    System.out.println("Total : " + money.format(total));
    System.out.println("Tax : " + money.format(tax));
    System.out.println("Tax+Total: " + money.format(taxedTotal));
  }
}

Como usamos el tipo double para todos los cálculos internos, tenemos los siguientes resultados:

Subtotal : $100.05
Discount : $10.00
Total : $90.04
Tax : $4.50
Tax+Total: $94.55

Read the rest of this entry »

Discutir en el foro (0)

(4) Comments    Read More