BigDecimal

De Dos Ideas.
Revisión del 20:38 22 ene 2010 de Acandal (discusión | contribuciones) (Ver también)
(dif) ← Revisión anterior | Revisión actual (dif) | Revisión siguiente → (dif)
Saltar a: navegación, buscar

La clase java.math.BigDecimal es una clase de Java para representar números con coma flotante, de manera precisa.

La clase BigDecimal tiene métodos para operar al mismo (sumar, restar, multiplicar, dividir).


Construcción

Para números con punto flotante (es decir, con parte decimal) la forma recomendada de construir un objeto BigDecimal es a través de un String.

BigDecimal a = new BigDecimal("10.20");

La construcción utilizando un double no es precisa, por la impresición intrínseca del Double.

El BigDecimal en el JDK 1.4 y el JDK 1.5

Supongamos el siguiente código:

new BigDecimal(1);

Depende donde se compile y ejecute, podemos tener problemas. En particular:

  • Compilado con el JDK 1.4, funciona OK siempre
  • Compilado con el JDK 1.5 y ejecutado en una JVM 1.5, funciona OK
  • Compilado con el JDK 1.5 y ejecutado en una JVM 1.4, falla con un "NoSuchMethodError"

El problema

En JSE 1.4 NO existe el constructor BigDecimal(int). Luego el compilador del JDK 1.4 resuelve la llamada hacia el constructor Big Decimal(double).

Ahora bien, en JSE 1.5 se agregó el constructor BigDecimal(int). Al usar este compilador, se realiza la llamada a dicho constructor. Si se ejecuta con el Runtime de 1.5, todo funciona bien. Pero al ejecutar este código con el Runtime de 1.4, no se encuentra el constructor Big Decimal(int), y cuelga como ya vemos.

Solución

Invocar al constructor del BigDecimal con un String. O asegurarse que la ejecución se hará sobre un JSE 1.5

Ver también