Autor Tema: CU00652B Error incompatible types possible lossy conversion from double to float  (Leído 5539 veces)

jupertivo

  • Sin experiencia
  • *
  • Mensajes: 29
  • Aprendiendo y más allá
    • Ver Perfil
Hola amigos. Lo primero enhorabuena por el curso de Java desde cero. Poco a poco voy avanzando sin demasiadas penuras, y en parte, por cómo habéis redactado y explicado el curso.

Pero ahora he llegado a una duda para la que no obtengo respuesta. He buscado por los foros y en San Google, pero no obtengo la respuesta "precisa".

Entrega CU00652B, primer ejemplo. Lo transcribo a BlueJ, compilo, OK. Creo un objeto New Deposito, donde me pide los valores del diámetro, altura y el Id. Introduzco, p.e., d=3.256, h=4.954 e id="001".

En esa misma ventana me contesta en la parte de abajo: "Error: incompatible types: possible lossy conversion from double to float".

No lo entiendo. En el código, las variables están definidas como "float", y los valores introducidos no son tan "grandes" como para que los considere "double".

Si cambio en el programa las variables a tipo "double", no da error. Si introduzco valores enteros (ej.: 2 y 3), no da error. ¿Qué está pasando?

Gracias por vuestra atención.
« Última modificación: 23 de Marzo 2015, 08:35 por Alex Rodríguez »
Descubrir y enmendar los pequeños errores ayuda a no cometer los grandes

javi in the sky

  • Avanzado
  • ****
  • Mensajes: 393
    • Ver Perfil
Re:CU00652B. Error con el tipo primitivo float en el primer ejemplo
« Respuesta #1 en: 22 de Marzo 2015, 12:52 »
Hola jupertivo, el problema pienso que está un poco en las definiciones internas de java y el enfoque que le da java al tratamiento numérico, no en que los valores que introduces sean grandes. Cuando se introduce un valor numérico en java como 3.256 java por defecto lo considera double. ¿Por qué? Porque para java double es el tipo numérico decimal por defecto, no tiene en consideración si es grande o si es pequeño, simplemente toma el tipo numérico universal decimal de java, el double. Si en el método sobre el que se aplica se requiere un float, avisa de que puede haber una pérdida de precisión desde el más preciso (double) al menos preciso (float). Para indicarle a java que el valor numérico introducido queremos que se trate como un float tendríamos que introducir 3.256f

Cuando introduces valores enteros java hace una conversión automática de tipos y transforma por ejemplo un 3 en 3.0f si tiene que pasarlo a float ó 3.0 si tiene que pasarlo a double.

Todo esto son detalles propios de java que en otros lenguajes puede ser de otra manera. Una forma de evitar problemas con esto es trabajar siempre con double. Saludos  :D

jupertivo

  • Sin experiencia
  • *
  • Mensajes: 29
  • Aprendiendo y más allá
    • Ver Perfil
Re:CU00652B. Error con el tipo primitivo float en el primer ejemplo
« Respuesta #2 en: 22 de Marzo 2015, 13:37 »
Hola javi in the sky. Gracias por tu atención y por la respuesta. A esa conclusión he llegado también. Era por entender más "racionalmente" el porqué de si el código ya define una variable local, parámetro o campo de una clase como 'float', Java hace eso. En el código de la lección CU00652B pone:

Código: [Seleccionar]
//Constructor de la clase que pide los parámetros necesarios
          public Deposito (float valor_diametro, float valor_altura, String valor_idDeposito) {
              if (valor_diametro > 0 && valor_altura > 0) {
                    diametro = valor_diametro;
                    altura = valor_altura;
                    idDeposito = valor_idDeposito;
             } else {
                  diametro = 10;
                  altura = 5;
                  idDeposito = "000";
             } } //Cierre del constructor

Los valores son introducidos a petición del constructor, no son fijos. Por lo que no puedo ponerles p.e. 23.12f (o así lo veo yo).
Declarando las variables, etc. como float, sin problema. Era por lo de ahorrar memoria al escribir código eficiente según las directrices dadas en las lecciones.

Gracias de nuevo. :)
Descubrir y enmendar los pequeños errores ayuda a no cometer los grandes

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".