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

C# Discussion :

reslutat d'une equation = 0 [Débutant]


Sujet :

C#

  1. #1
    Membre à l'essai
    Inscrit en
    Octobre 2009
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 22
    Points : 19
    Points
    19
    Par défaut reslutat d'une equation = 0
    Bonjour,
    j'ai une equation qui retourne toujours un 0.0 je sais pas pourquoi, ca parait pourtant logique:
    un float= (entier/entier)*100
    j'ai essayer avec double au lieur de float mais tjs la mêm chose
    je vous ais téléchargé des imprim ecran lors du deboggage
    les deux entiers etant non nul la float est tjs = 0
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      if (parcours != 0)
                    {
                        moyen_cons = ((qte / parcours) * 100);
     
                    }
    Images attachées Images attachées    

  2. #2
    Membre éclairé Avatar de chamamo
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    588
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 588
    Points : 735
    Points
    735
    Par défaut
    Essaie:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    moyen_cons = ((float)(qte / parcours) * 100);

  3. #3
    Membre éprouvé Avatar de sisqo60
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2006
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 754
    Points : 1 188
    Points
    1 188
    Par défaut
    Bonjour,

    essayes plutôt ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    double moyen_cons = (((double)qte / (double)parcours) * 100d);
    ce sera mieux

  4. #4
    Membre éclairé Avatar de chamamo
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    588
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 588
    Points : 735
    Points
    735
    Par défaut
    Citation Envoyé par sisqo60 Voir le message
    Bonjour,

    essayes plutôt ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    double moyen_cons = (((double)qte / (double)parcours) * 100d);
    ce sera mieux
    Effectivement je n'ai pas fait attention, il faut caster chaque variable, mais tu peux garder 100 au lieu de 100d car le type du résultat est déduit depuis la partie gauche, donc c'est le float qui l'emporte.

  5. #5
    Membre éprouvé Avatar de sisqo60
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2006
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 754
    Points : 1 188
    Points
    1 188
    Par défaut
    chamamo, ta solution ne fonctionne pas car le résultat est indirectement le même

    En fait, ce n'est pas chaque variable qui doit être castée en double, c'est le premier opérande qui détermine la classe qui sera utilisée pour réaliser l'opération en fonction des priorités opératoires.

    Ce code aurait fonctionné aussi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    (double)qte / parcours * 100
    c'est opérateur division de double qui sera utilisé pour réaliser la division, et le résultat sera un double, donc la multiplication sera basée sur l'opérateur de la classe double aussi. En fonction des priorités opératoires (et des opérations bien sûr) le résultat n'est pas le même... Ce sont des choses qui ne sont pas toujours connues des développeurs, et qui font grincer des dents lorsqu'on y est confronté

    Bon dév.

  6. #6
    Membre éclairé Avatar de chamamo
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    588
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 588
    Points : 735
    Points
    735
    Par défaut
    sisqo60 Je ne suis pas d'accord avec toi quand tu dis que c'est le premier opérande qui détermine le type du résultat car ceci fonctionne aussi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    qte/(double) parcours*100
    c'est le type le plus élevé dans la formule qui l'emporte
    si tu as v1*v2/v3 - v4

    v1 v2 v3 sont des entiers, v4 est un double, le résultat sera un double.

    l’erreur que j'avais faite c'était caster le résultat (qte/parcours) qui est une division entière, il faut caster l'un des deux.

  7. #7
    Membre à l'essai
    Inscrit en
    Octobre 2009
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 22
    Points : 19
    Points
    19
    Par défaut
    merci les mecs problème resolu
    Images attachées Images attachées  

  8. #8
    Membre éprouvé Avatar de sisqo60
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2006
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 754
    Points : 1 188
    Points
    1 188
    Par défaut
    Je m'auto cite :

    Citation Envoyé par sisqo60 Voir le message
    c'est le premier opérande qui détermine la classe qui sera utilisée pour réaliser l'opération en fonction des priorités opératoires.
    ça veut dire que c'est l'opérateur de division de la classe int qui sera utilisé pour réaliser l'opération et la division avec un nombre flottant donnera un résultat de type flottant.

    Citation Envoyé par chamamo Voir le message
    ...c'est le premier opérande qui détermine le type du résultat car ceci fonctionne aussi:
    Ce que tu interprète n'est pas exactement ce que j'ai dit. Je n'ai jamais dit que que le type du résultat est le même que celui du premier opérande!

    Citation Envoyé par chamamo Voir le message
    c'est le type le plus élevé dans la formule qui l'emporte
    Il existe des types élevés et des types moins élevés? Première nouvelle, on ne me dis rien!?

    Tu n'es pas d'accord, OK, mais ça prouve juste que tu n'as rien compris.

    Une opération sur des types entiers renvoie toujours un entier (short, int, long...)
    Une opération sur les types flottants renvoie toujours un résultat en nombre flottant (float, double, decimal).
    Une opération sur les types flottants et entiers renvoie toujours un type flottant.

    Sur ce, louai a résolu son problème, c'est le principal!

  9. #9
    Membre éclairé Avatar de chamamo
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    588
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 588
    Points : 735
    Points
    735
    Par défaut
    Ce que je voulais dire par élevé (j'ai mal choisi le terme peut être) c'est que mathématiquement parlant il s'agit des ensembles et des sous ensembles, les nombres entiers sont inclus dans les l'enssemble des nombres réels R.

    finalement on est d'accord j'ai peu être eu une autre interprétation, quand tu dis une opération sur les types flottants et entiers renvoie toujours un type flottant tu ne dis pas pourquoi, et bien pour la même raison que ce que j'ai dit, les entiers sont des nombres réels pas l'inverse.

    pourquoi caster l'un des deux, car le cast en lui même est une opération (unaire, la division est binaire), plus prioritaire même que la division.

    Et arrête de constater qu'on a rien compris juste parce que on a eu une interprétation différente que la tienne, il faut rigoler mec.

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

Discussions similaires

  1. comment trouvé les racines d'une equation différentielle
    Par samplaid dans le forum Mathématiques
    Réponses: 4
    Dernier message: 05/11/2007, 16h53
  2. résolution d'une equation en c
    Par kawther dans le forum C
    Réponses: 15
    Dernier message: 22/07/2007, 15h48
  3. Réponses: 1
    Dernier message: 20/06/2007, 15h22
  4. [VBA-MATH]transformer une equation pour pouvoir la résoudre
    Par Marmotine dans le forum VBA Access
    Réponses: 6
    Dernier message: 01/04/2007, 15h03
  5. programme fortran90 qui calcule les racines d'une equation de deg 3 ?
    Par casier dans le forum Algorithmes et structures de données
    Réponses: 10
    Dernier message: 10/06/2006, 17h30

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