Question

Dans un autre exercice Bruce Eckel, le code que j'ai écrit prend une valeur de la méthode et des changements dans une autre classe. Voici mon code:

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

Il est lancer une erreur « perte possible de précision ».

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

ne peut pas être doubles floats aussi bien?

merci à l'avance

Était-ce utile?

La solution

Oui, mais vous devez spécifier qu'ils sont flotteurs, sinon ils sont traités comme doubles:

z.b = 2.2f

« f » à la fin du numéro, il est un flotteur au lieu d'un double.

Java ne sera pas automatiquement réduire un double à un flotteur.

Autres conseils

Non, flotteurs peuvent être automatiquement upcast à double, mais en double ne peut jamais être flotteurs sans coulée explicite, car doubles ont la plus grande plage.

gamme de flotteur est 1.40129846432481707e-45 à 3.40282346638528860e+38

double rangée est 4.94065645841246544e-324d à 1.79769313486231570e+308d

Par défaut, Java traitera un nombre décimal (par exemple « 4.3 ») en tant que double, sauf indication contraire une float en ajoutant un f après le nombre (par exemple « 4.3f »).

Vous le même problème sur les deux lignes. Tout d'abord, le littéral décimal est interprété comme un double par le compilateur. Il tente ensuite de l'assigner à b, qui est de type float. Etant donné qu'un double est de 64 bits et un float est seulement 32 bits (voir la documentation de Java primitives de ), Java vous donne une erreur indiquant que le float ne rentre pas à l'intérieur du double. La solution est d'ajouter un f à vos littéraux décimaux.

Si vous essayez de faire le contraire (à savoir attribuer un float à un double), ce serait bien puisque vous pouvez installer un 32 bits de float dans un de double 64.

Ne pas utiliser float. Il n'y a presque jamais une bonne raison de l'utiliser et n'a pas été depuis plus d'une décennie. Il suffit d'utiliser double.

plage de flotteur est inférieure au double si un flotteur peut être facilement représenté en double, mais l'inverse est impossible, car, disons que nous prenons une valeur qui est hors de portée de flotteur puis lors de la convention, nous allons perdre les données exactes

scroll top