Saltar al contenido

Representar valores flotantes en Java

Te doy la bienvenida a nuestra comunidad, aquí hallarás la solucíon a lo que estás buscando.

Solución:

Los literales de punto flotante en Java son un double valor por defecto.

JLS 3.10.2 Literales de coma flotante

Un literal de coma flotante es de tipo float si tiene el sufijo de una letra ASCII F o f; de lo contrario su tipo es double y opcionalmente se le puede añadir como sufijo una letra ASCII D o d.

No puedes asignar un double valor a un float sin una conversión de restricción explícita. Por tanto, tiene dos opciones:

  • Para literales, use el sufijo f o F para denotar un float valor
  • Para los no literales, use una conversión explícita (float)

Un ejemplo de esto último es:

double d = 1.1;
float f = (float) d; // compiles fine!

Sobre la ampliación de las conversiones

La razón por la que esto se compila:

float f = 1;

se debe a que la conversión de ampliación de int a float se puede hacer implícitamente en el contexto de una asignación.

Conversión de asignación JLS 5.2

Conversión de asignación ocurre cuando el valor de una expresión se asigna a una variable: el tipo de la expresión debe convertirse al tipo de la variable. Los contextos de asignación permiten el uso de uno de los siguientes:

  • una conversión primitiva de ampliación (§5.1.2)
  • […]

Conversión primitiva de ampliación de JLS 5.1.2

Las siguientes 19 conversiones específicas en tipos primitivos se denominan Ampliación de conversiones primitivas:

  • int a long, float, o double
  • […]

Otro sufijo de tipo de datos para literales

Como se mencionó anteriormente, también existe el D o d sufijo para double. Considere este fragmento, por ejemplo:

static void f(int i) 
    System.out.println("(int)");

static void f(double d) 
    System.out.println("(double)");


//...
f(1);   // prints "(int)"
f(1D);  // prints "(double)"

También hay un sufijo para long literales, que es L o l (letra minúscula). Está muy recomendable que usa la variante en mayúsculas.

JLS 3.10.1 Literales enteros

Un literal entero es de tipo long si tiene el sufijo de una letra ASCII L o l (ell); de lo contrario es de tipo int. El sufijo L se prefiere, porque la letra l (ell) a menudo es difícil de distinguir del dígito 1 (one).

Estás asignando un double valor a un float variable. 1.1 por sí mismo (sin el f tachonado al final) es asumido por el compilador como de tipo double. Al compilador no le gusta hacer abatimientos implícitos porque existe la posibilidad de perder precisión.

Si estás contento con lo expuesto, tienes el poder dejar una reseña acerca de qué le añadirías a este post.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *