En la programación hay situaciones donde necesitamos cambiar el tipo de dato de nuestras variables, esto lo conocemos como Cast.
Estimación:
double monthlyDogs = dogsQuantity /12.0;// monthlyDogs: 2.5 (pero no es posible, ¡no rescatamos medio perrito!)int estimatedMonthlyDogs =(int) monthlyDogs;// estimatedMonthlyDogs: 2// Recuerda que el casteo no redondea, solo quita los decimales:Math.sqrt(3)// 1.7320508075688772(int)Math.sqrt(3)// 1
Exactitud:
int a =30;int b =12;a / b // 2(double) a / b // 2.5
cuando conviertes un dato (doublé) en un dato (int) cada 2 meses un perrito se pierde en el limbo, jajaja
Jajajaja
porque un perrito?... porque en el limbo?
Overflow y Underflow
Algo muy importante a considerar al realizar un casting entre variables es que puede alterarse el valor de la misma si excede el máximo o mínimo soportado por el tipo de dato a convertir.
Por ejemplo:
short y =(short)1921222;//Almacena 20678
El valor 1921222 es demasiado grande para almacenarse como un short, por lo que se produce un desbordamiento (overflow) numérico y se convierte en 20678.
El overflow es cuando un numero es tan grande que ya no cabe dentro del tipo de dato, por lo que Java lo ajusta al siguiente valor mas bajo y cuenta desde allí.
Gracias! Buen aporte.
¡Interesante! Overflow y Underflow.
Excelente tabla para comprender mejor el tipo de casting que se puede hacer y si hay o no pérdida de información.
Gracias.
Excelente aporte gracias
El lado cruel de java, "un perrito se partió a la mitad".
Culpa de este malévolo lenguaje, evidentemente :(
CONVERSIONES ENTRE TIPOS
++NO PERDEMOS INFORMACIÓN++
De char ---> int.
De byte ---> short ---> int ---> long
De int ---> double
De float ---> double
++PERDEMOS INFORMACIÓN++
De int ---> float
De long ---> float
De long ---> double
El casting no aproxima o redondea, solo ignora algunos números para tener el valor estimado, en caso de cambiar a tipo int.
Gracias a la primera mitad del curso, he sido el que ha sacado mayor nota en el examen de mi u xD. Gracias Platzi
Épico
Te comparto este artículo con más ejemplos de casting en Java. 💚
// casteo de Variables
// cambio de double a entero, elimina la parte decimal del numero
double d = 86.69;
int i = (int) d;
System.out.println("EL VALOR DE D ES : "+ d);
System.out.println("EL VALOR DE I ES : "+ i);
//Ubicar 30 perritos al año, deseo saber cuantos perritos ubiqué al mes double monthlyDogs =30/12; int estimatedMonthlyDogs =(int ) monthlyDogs;System.out.println("EL NUMERO ESTIMADO DE PERRITOS UBICADOS ES "+estimatedMonthlyDogs);// Exactitud int a =30; int b =12;System.out.println("EL NUMERO EXACTO DE PERRTIOS AL MES ES: "+((double)(a/b)));
Te quedó mal en el último al ponerle los parentesis no te imprime el resultado deseado, ya que imprime 2.0.
Para que de correctamente debes colocar así:
System.out.println("EL NUMERO EXACTO DE PERRTIOS AL MES ES: "+(double) a/b);
Saludos!!
Tengo una pregunta, este es mi codigo;
<int totalDogs =30; double monthlyDogs = totalDogs/12;System.out.println("Entregamos: "+ monthlyDogs +" al mes.");// Esto no es posible porque no se ppueden entregar 0.5 perros.// Estimacion: int estimatedMonthlyDogs =(int) monthlyDogs;System.out.println("Estimadamente se entregaron: "+ estimatedMonthlyDogs +" perros al mes");// Exactitud int a =30; int b =12;System.out.println("Exactamente, el valor es: "+(double) a/b);>
Y este es el resultado:
<Entregamos:2.0 al mes.Estimadamente se entregaron:2 perros al mes
Exactamente, el valor es:2.5>
¿Por que, al hacer la cuenta de "totalDogs/12", osea la variable monthlyDogs, al imprimirla me sale 2.0, en vez de 2.5?
int significa "entero".
La variable monthlyDogs sí es igual a 2.5, pero, en esta línea int estimatedMonthlyDogs = (int) monthlyDogs;, se declara que estimatedMonthlyDogs será igual al entero de monthlyDogs. Y, al final, estás mandando a imprimir estimatedMonthlyDogs.
Por eso, se quita el .5 e imprime en pantalla 2.0.
Si aún tienes duda, ten la confianza de decirlo, así intentaré explicarlo mejor.
Lo que pasa es que estás dividiendo dos enteros y asignándole el valor a un double. La división entre 2 enteros te va a dar como resultado un entero, por lo que el valor queda truncado.
Si haces la división con totalDogs/12.0 fuerzas a que ya no sea una división entera sino de punto flotante y te debe dar el resultado que esperas.
ideal para examen donde se den enteros y pedir resultados con decimales
pregunta : por que no puedo convertir un string a un char?
Te marca algún error? nos puedes pegar ese fragmento de código?
Por que un string no cabe en un dato, por ejemplo, char cabe en una cajita, mientras string necesita 8 cajas para ser guardado(espacios de memoria)
😮 Nos podemos encontrar con casting implícitos y explícitos para manipular datos.
El casting es un procedimiento para transformar una variable primitiva de un tipo a otro, o transformar un objeto de una clase a otra clase siempre y cuando haya una relación de herencia entre ambas
Programar Java en VSC es exquisito, asiste demasiado bien como Typescript
Super!!
Tengo una pregunta, en el caso de que la división me de 2.5, pero para el resultado quiero manejar/aplicar esta siguiente lógica: si el punto decimal es igual o pasa de 2.5 que me tire a 3, pero si la division me da 2.4 que me deje la respuesta en 2 entero, ¿Cómo paso esto a programación?
Java posse estos 2 metodos, para redondear Math.ceil(), redondea al entero inmediamtamente superior, y Math.floor() , redondea al entero inmediatametne inferior
para obtener el valor del residuo de la divison otra forma tambien es emplear el operador modulo (resultadoDivision % 2 != 0) pero apra entenderlo mejor obtengo el entero en cast y se lo resto al resultado original con el decimal asi obtengo el decimal
El casting convierte tipos de datos que sean compatibles entre sí, por ejemplo un "int " a "double" o a "short". El "cast" solo funciona cuando el tipo que se castea es una subclase de la clase casteada (o implementa la interfaz si se castea a una interfaz), o si existe una conversión explícita de la segunda clase a la primera (por ejemplo, de long a int). Pero no puedes castear de string a int porque no se cumple ninguna de las condiciones anteriores.
En el parseo o parsing lo que hace es analizar si el contenido de una cadena de texto o string es compatible con el tipo de dato al que se va a llevar
No se podría parsear a un número entero una cadena de texto que contenga letras, pero si solo contiene números se puede hacer el parseo a entero desde la cadena de texto y vicerversa.