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)

(2) 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)

(1) Comment    Read More