Bonjour à tous,
j essaye de multiplier une variable de type float float t=3/4; avec une variable de type long long r=(long) 78; et j assigne le tout dans un int int result=r*t; et ça me donne 0. Je ne comprends pas et trouve pas.
Merci
Version imprimable
Bonjour à tous,
j essaye de multiplier une variable de type float float t=3/4; avec une variable de type long long r=(long) 78; et j assigne le tout dans un int int result=r*t; et ça me donne 0. Je ne comprends pas et trouve pas.
Merci
Tout simplement car t vaut ici 0.0f ! En effet tu fais 3/4 soit une division entière dont le résultat vaut 0. Pour bénéficier de la promotion numérique binaire*, il faut qu'au moins une des deux operandes soit un float donc : 3f/4, 3/4f ou 3f/4f et dans ce cas on aura bien t qui vaut 0.75f.
*Si une opérande d'un opérateur binaire est un float, l'autre est promue en float.
Non ça marche pas et ceci même si je cast le resultat en int...
que 3 soit en 3f ,3.0f, 3.0, il faut faire surement un cast au bout d un moment, je le multiplie par un long avant de mettre le résultat dans un int
Quel résultat castes-tu en int ?
- Si c'est r*t, oui c'est indispensable, puisque, pour la raison indiquée par @bouye, r*t est un float (r est promue en float), donc ça ne peut pas être mis dans un int sans cast ;
- Si c'est 3f/4, alors c'est normal que le résultat soit 0, parce que (int)(3f/4) vaut 0.
Cela dit,
affiche 58.Code:
1
2
3
4
5 float t=3f/4; long r=(long) 78; // ou long r=78L; ou long r=78; int result=(int)(r*t); System.out.println(result);
Vos "méthodes" marchent. Merci
Ben euh, ce ne sont pas des "méthodes", c'est la manières normale de faire !
3/4 ça donne 0 puisque les deux opérandes sont des int donc on a une division entière.
Ensuite 0 qui devient 0.0f quand c'est stocké dans la variable t.
Tu l'aurais vu tout de suite si tu t’étais focalisé sur t au lieu de te focaliser sur result (le problème t'aurais tout de suite sauté au yeux si tu avais imprimé t ou si tu étais passé par le débogueur).
Donc 0.0f * 78l ça fait 0.0f ce qui donne 0 après le cast en int.