IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

Multiplication float par long qui donne 0


Sujet :

avec Java

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2014
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2014
    Messages : 66
    Points : 33
    Points
    33
    Par défaut Multiplication float par long qui donne 0
    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

  2. #2
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 851
    Points
    22 851
    Billets dans le blog
    51
    Par défaut
    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.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2014
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2014
    Messages : 66
    Points : 33
    Points
    33
    Par défaut
    Non ça marche pas et ceci même si je cast le resultat en int...

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2014
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2014
    Messages : 66
    Points : 33
    Points
    33
    Par défaut
    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

  5. #5
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par 2001hal Voir le message
    Non ça marche pas et ceci même si je cast le resultat en 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,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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);
    affiche 58.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2014
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2014
    Messages : 66
    Points : 33
    Points
    33
    Par défaut
    Vos "méthodes" marchent. Merci

  7. #7
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 851
    Points
    22 851
    Billets dans le blog
    51
    Par défaut
    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.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. affichage des enregistrements qui commencent par une lettre donnée
    Par kroma23 dans le forum Bases de données
    Réponses: 4
    Dernier message: 14/10/2011, 09h08
  2. [AC-2000] Multiplication de réels qui donne un résultat non juste
    Par grincheuse dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 07/03/2011, 09h39
  3. Trier une Map<Long, String> par rapport aux données
    Par zuzuu dans le forum Collection et Stream
    Réponses: 9
    Dernier message: 26/03/2009, 10h03
  4. Afficher des noms qui commencent par une lettre donnée
    Par kroma23 dans le forum Bases de données
    Réponses: 1
    Dernier message: 22/11/2008, 16h48
  5. [SQL] Multiplication après requête qui donne plusieurs données en résultats
    Par Yagami_Raito dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 04/06/2007, 11h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo