Para explicar esta solución hay que entender previamente la diferencia que existe entre tipos primitivos o primitivas y objetos, en cuanto a la declaración de las variables en nuestro código. Los tipos primitivos son los tipos de datos más básicos con los que podemos declarar una variable, de los cuales en java tenemos ocho: byte, short, int, long, float, double, char y boolean.
No es objetivo de este artículo explicar cada tipo, pero sí decir que java guarda un espacio y un lugar específico en memoria para ellos cuando declaramos una variable. Y no tienen más, son así y punto. Si declaramos una variable char sabemos que en ella meteremos un carácter, si declaramos otra como boolean, dentro sólo habrá un true o un false.
Pero a veces necesitaremos realizar operaciones mucho más complejas que el simple tratamiento de caracteres, o básicas operaciones aritméticas. Para eso tenemos los tipos objeto, y dentro de estos (por no ponerme a disertar sobre la Programación Orientada a Objetos, que tampoco es misión de este artículo), los tipos envolventes o wrapper. Son los equivalentes a los tipos primitivos, pero empiezan con mayúscula: Byte, Short, Integer, Long, Float, Double, Character (no confundir con String, que siendo un tipo objeto, no es un tipo envolvente) y Boolean.
Se utilizan como tipo en la declaración, como cualquier objeto, y como cualquier objeto tienen sus propiedades y sus métodos. Pero ojo, que una variable declara con un tipo primitivo no es igual a la variable declarada con un tipo objeto (de hecho para eso tenemos un operador de igualdad como es “===”, que nos compara no sólo el contenido de dos variables, sino también su tipo). Y aquí llegamos a la cuestión.
A veces necesitamos pasar datos entre estos tipos diferentes, y el que nos trata en cuestión, que son dos tipos muy parecidos: BigDecimal, que aunque pueda parecer un tipo envolvente, no lo es (lo sería Float en este caso), y float, que es un tipo primitivo. Después de toda esta disertación, la solución es mucho más sencilla: para hacer que un BigDecimal devuelva un float (ojo, no un Float), utilizaremos uno de sus métodos más comunes, uno de conversión (o casteo, como también podemos denominar estas transformaciones).
El método será floatValue(), y se utilizaría de la siguiente manera:
Java BigDecimal bd = New BigDecimal(1.1); float f = bd.floatValue();12 BigDecimal bd=NewBigDecimal(1.1);floatf=bdfloatValue();
Si hiciéramos un System.out.println(f); obtendríamos 1.1