Question

J'essaie de calculer (360/24)/60. Je continue à obtenir la réponse 0,0 alors que je devrais obtenir 0,25.

Dans les mots:Je veux diviser 360 par 24 puis diviser le résultat par 60

public class Divide {

    public static void main(String[] args){
      float div = ((360 / 24) / 60);
      System.out.println(div);

    }
}

Ceci imprime :

0.0

Pourquoi donc?Est-ce que je fais quelque chose de vraiment stupide ou y a-t-il une bonne raison à cela

Était-ce utile?

La solution

Aucun des opérandes dans l'arithmétique est un flotteur - il est donc tout se fait avec l'arithmétique entière et puis converti en un flotteur. Si vous changez le type d'un opérande approprié à un flotteur, cela fonctionnera bien:

float div = ((360 / 24f) / 60); // div is now 0.25

Notez que si vous avez changé seulement 60 être un flotteur, vous finiriez avec le 360/24 en cours d'exécution en arithmétique entière - ce qui est bien dans ce cas particulier, mais ne représente pas ce que je soupçonne que vous avez vraiment l'intention . Fondamentalement, vous devez vous assurer que l'opération arithmétique est effectuée de la manière que vous voulez.

Autres conseils

Vous êtes en train de faire la division entière ( JLS 15.17.2 ).

float div = ((360 / 24) / 60);
float div = (float) ((360 / 24) / 60);
float div = (float) (15 / 60);
float div = (float) (0);
float div = 0F;

Pour la division à virgule flottante, au moins un des opérandes doivent être un type numérique à virgule flottante.

float div = ((360F / 24) / 60);
float div = 15F / 60;
float div = 0.25F;

Astuce: si la précision est importante, vous voulez faire autant du calcul avec double, avant de se convertir à float. En fait, à moins que votre profil démontre que vous avez absolument besoin que float, vous devriez toujours préférer double.

    float f;

    f = (1E-17F * 1E-17F);
    System.out.println(f); // prints "9.999999E-35"

    f = (float) (1E-17D * 1E-17D);
    System.out.println(f); // prints "1.0E-34"

Dans votre méthode principale,

public static void main(String[] args){
      float div = ((360 / 24) / 60);
      System.out.println(div);
}

Notez que 360, 24 et 60 sont tous des valeurs entières.Vous obtiendrez ainsi des valeurs étranges.

360/24 -> 15 (parfaitement bien)
15 / 60 -> 0,4 ​​(virgule flottante)

Malheureusement pour vous les nombres à virgule flottante sont tronqués donc vous obtenez :

-> 0 (integer value)

Ensuite, en attribuant 0 à une variable à virgule flottante, vous remplacez 0 par une valeur à virgule flottante, 0,0.Donc le résultat.

Si vous souhaitez les diviser, vous devez les changer en valeurs à virgule flottante.

Le code correct doit être le suivant :

public static void main(String[] args){
      float div = ((360.0 / 24.0) / 60.0);
      System.out.println(div);
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top