Pregunta

En otro ejercicio Bruce Eckel, el código que he escrito tiene un valor método y cambios en otra clase. Aquí está mi código:

class Big {
  float b;
}

public class PassObject {
  static void f(Letter y) {
    y.c = 'z';
  } //end f()
  static void g(Big z) {
    z.b = 2.2;
  }

  public static void main(String[] args ) {
    Big t = new Big();
    t.b = 5.6;
    System.out.println("1: t.b : " + t.b);
    g(x);
    System.out.println("2: t.b: " + t.b);
  } //end main
}//end class

Se está lanzando un error que dice "Posible pérdida de precisión."

PassObject.java:13: possible loss of precision
found: double
required : float   z.b = 2.2
passobject.java:20: possible loss of precision
found : double
required : float   t.b = 5.6

no puede ser doubles floats así?

Gracias de antemano

¿Fue útil?

Solución

Sí, pero tiene que especificar que son flotadores, de lo contrario se les trata como dobles:

z.b = 2.2f

El 'f' al final del número hace que sea un flotador en lugar de una doble.

Java no se reducirá automáticamente un doble a un flotador.

Otros consejos

No, los flotadores pueden ser automáticamente upcast de dobles, pero nunca pueden ser dobles flotadores sin conversión explícita porque los dobles tienen el rango más grande.

gama flotador está 1.40129846432481707e-45 a 3.40282346638528860e+38

doble rango es 4.94065645841246544e-324d a 1.79769313486231570e+308d

Por defecto, Java tratará a un número decimal (por ejemplo, "4.3") como un double a menos que de otro modo se especifica un float mediante la adición de un F después del número (por ejemplo, "4.3f").

Usted está teniendo el mismo problema en ambas líneas. En primer lugar, el literal decimal se interpreta como un doble por el compilador. A continuación, intenta asignar a b, que es de tipo float. Desde un double es de 64 bits y una float es de sólo 32 bits (ver de la documentación primitivas Java), Java le da un error que indica que el float no puede caber dentro del double. La solución es añadir una F a sus literales decimales.

Si estaba tratando de hacer lo contrario (es decir, asignar un float a un double), eso sería bueno, ya que puede caber 32 bits de un float dentro de 64 double.

No utilice flotador. Casi nunca hay una buena razón para usarlo y no ha sido por más de una década. Sólo tiene que utilizar doble.

can't doubles be floats as well?

No. Cada valor o variable tiene exactamente un tipo (doble, flotador, int, long, etc ...). El del lenguaje Java Specification exactamente lo que sucede cuando se tratar de asignar un valor de un tipo a una variable de otro tipo. En general, las asignaciones de un valor "más pequeño" a un tipo "más grande" son permitidos y realizan de forma implícita, pero asignaciones donde la información podría perderse debido a que el tipo de destino es demasiado "pequeño" para contener todos los valores del tipo de origen no están autorizados por la compilador, incluso si el valor concreto encaja en el tipo de destino.

Es por eso que el compilador se queja de que la asignación de un valor doble (que lo literal implícita es) a una variable de tipo float podría perder información, y hay que aplacar a que ya sea haciendo el valor de punto flotante, o por colada de forma explícita.

Una de las áreas que a menudo provoca confusiones es cálculos, ya que estos son implícitamente "amplió" a int por razones técnicas. Así que si se multiplica dos cortos y tratar de asignar el resultado a un corto, el compilador se quejará porque el resultado del cálculo es un int.

rango de flotación es menor del doble de lo que un flotador puede ser fácilmente representado en doble, pero lo contrario no es posible porque, Diga ahora tomamos un valor que está fuera del rango de flotación a continuación durante la convención vamos a perder los datos exactos

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top