La media que se perdió
Sacas un 7, un 6 y un 6. Tu media es 6,33. Pero tu programa dice que es un 6.
¿Dónde se fueron los decimales? Se perdieron al mezclar tipos.
Hoy aprendes a pasar un dato de un tipo a otro sin perder nada que importe.
Palabras clave
| Palabra | Qué significa | Ejemplo |
|---|---|---|
| Conversión | Pasar un dato de un tipo a otro. | de int a double |
| Cast | Una conversión que pides tú, con el tipo entre paréntesis. | (int) 3.99 |
| Redondear | Dar el número entero más cercano. | Math.round(3.6) da 4 |
| parseInt | Convierte un texto en un número entero. | Integer.parseInt("12") |
| parseDouble | Convierte un texto en un número con decimales. | Double.parseDouble("2.5") |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
De int a double: Java lo hace solo
Un int cabe siempre dentro de un double. Es como meter una moneda en una caja grande.
Por eso Java convierte de int a double sin que se lo pidas. No pierdes nada: el 5 pasa a ser 5.0.
Pero ojo con las divisiones. Mira el ejemplo.
Pruébalo: de entero a decimal
public class Main {
public static void main(String[] args) {
int euros = 5;
double price = euros;
System.out.println(price);
// Ojo: 7 / 2 se calcula primero con enteros y da 3.
double half = 7 / 2;
System.out.println(half);
// Con 2.0 la cuenta ya tiene decimales.
double right = 7 / 2.0;
System.out.println(right);
}
}
De double a int: lo pides tú
Al revés es distinto. Un double no cabe en un int sin perder los decimales.
Java no lo hace solo. Tienes que pedirlo con un cast: escribes (int) delante.
Así dices: "sé que pierdo los decimales, hazlo".
(int) corta, no redondea
Advertencia
(int) 3.99 da 3, no 4. Java tira los decimales sin mirarlos. Para el entero más cercano usa Math.round.
Pruébalo: cortar y redondear
public class Main {
public static void main(String[] args) {
double price = 3.99;
// El cast corta los decimales.
int cut = (int) price;
System.out.println("Cortado: " + cut);
// Math.round da el entero más cercano.
int rounded = (int) Math.round(price);
System.out.println("Redondeado: " + rounded);
// Prueba con 3.4 y mira la diferencia.
}
}
Ejemplo resuelto: qué da cada cuenta
| Cuenta | Resultado | Qué pasa |
|---|---|---|
| 7 / 2 | 3 | Dos enteros dan un entero. |
| 7 / 2.0 | 3.5 | Un decimal hace decimal la cuenta. |
| (double) 7 / 2 | 3.5 | El 7 se convierte antes de dividir. |
| (double) (7 / 2) | 3.0 | Primero se divide con enteros: 3. |
| (int) 3.99 | 3 | El cast corta los decimales. |
| Math.round(3.99) | 4 | El entero más cercano. |
| Math.round(3.4) | 3 | 3.4 está más cerca de 3. |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Del texto al número y al revés
El texto "12" no es el número 12. No puedes sumar con él.
Para convertirlo usa Integer.parseInt("12"). Para decimales, Double.parseDouble("2.5").
Al revés es fácil: String.valueOf(12) da el texto "12".
Pruébalo: sumar un texto
public class Main {
public static void main(String[] args) {
String text = "12";
int number = Integer.parseInt(text);
// Con textos, + une. Con números, + suma.
System.out.println(text + text);
System.out.println(number + number);
String back = String.valueOf(number + 1);
System.out.println(back + "!");
}
}
Un texto que no es un número
Nota
Si escribes Integer.parseInt("doce"), el programa falla. Java no sabe leer "doce". En la lección Cuando algo sale mal verás cómo evitarlo.
Ejemplo resuelto: el IVA a céntimos
| Paso | Cuenta | Resultado |
|---|---|---|
| 1. Precio con IVA | 9.99 * 1.21 | 12.0879 |
| 2. Pasar a céntimos | 12.0879 * 100 | 1208.79 |
| 3. Redondear | Math.round(1208.79) | 1209 |
| 4. Volver a euros | 1209 / 100.0 | 12.09 |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Pruébalo: el precio con IVA
public class Main {
public static void main(String[] args) {
double price = 9.99;
double withVat = price * 1.21;
// Los cuatro pasos de la tabla en una línea.
double cents = Math.round(withVat * 100) / 100.0;
System.out.println("Pagas " + cents + " euros.");
// Cambia el precio a 20 y ejecuta otra vez.
}
}