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 :

10/3 ? pourquoi un résultat entier ?


Sujet :

C#

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 14
    Par défaut 10/3 ? pourquoi un résultat entier ?
    Bonjour,

    si je fais un :

    C'est 3 qui s'affiche et non pas 3.3333333...

    Pourquoi ? Qu'ai-je omis ?

  2. #2
    Membre émérite Avatar de neptune
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 835
    Par défaut
    10 et 3 sont de entiers donc ton résultat est un entier.

  3. #3
    Membre très actif Avatar de fally
    Homme Profil pro
    Développeur .Net / BI
    Inscrit en
    Novembre 2007
    Messages
    966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur .Net / BI

    Informations forums :
    Inscription : Novembre 2007
    Messages : 966
    Par défaut
    Pour des calculs précis, travaille avec des Float

  4. #4
    Membre Expert Avatar de callo
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2004
    Messages
    887
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Togo

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 887
    Par défaut
    Pour avoir 2 décimals après la virgule, tu peux faire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
       float x;
       x = (float)10 / 3;
       Response.Write(x.ToString(".##"));  // pour avoir 2 chifres après la virgule
       Response.Write(x.ToString(".####"));  // pour avoir 4 chifres après la virgule

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 14
    Par défaut
    Oui, j'ai vu mon erreur.
    Mais j'ai un problème, j'utilise la compilation dynamique, c'est à dire que j'ai un string "10/3" par exemple que je donne en argument à une fonction qui l'évalue.

    Comment sans toucher à la formule puis-je demander un floattant ?

    si j'ai "8+(10/3)+((8+1)/86)" sans avoir à mettre des . dans la formule.

  6. #6
    Membre émérite Avatar de neptune
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 835
    Par défaut
    // Pas bien...
    float x;
    x = (float)10 / 3;

    // Bien...
    float x = 10F / 3F;

  7. #7
    Membre Expert Avatar de Tober
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2007
    Messages
    824
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 824
    Par défaut
    Citation Envoyé par neptune
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    // Pas bien...
    float x;
    x = (float)10 / 3;
     
    // Bien...
    float x = 10F / 3F;
    Pourquoi c'est pas bien ?

  8. #8
    Membre émérite Avatar de neptune
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 835
    Par défaut
    Car tu créé un objet de type Int et ensuite tu le cast en float. Autant le créer directement dans le bon type, non?

  9. #9
    Membre Expert Avatar de callo
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2004
    Messages
    887
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Togo

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 887
    Par défaut
    ok, je vois. Merci pour la remarque

  10. #10
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    547
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 547
    Par défaut
    Citation Envoyé par neptune Voir le message
    Car tu créé un objet de type Int et ensuite tu le cast en float. Autant le créer directement dans le bon type, non?
    On dirait pas vu que le resultat est correct. Si un int etait passé au milieu, on aurait un resultat du genre 3.000. Le runtime doit detecter le cast, et casté preventivement les deux int en floats.

    Pour l'op : si tu compiles directement une chaine, il va falloir la parser. De toutes facons, il le faut si ton utilisateur colle une division par 0 entiere au milieu, sans quoi tu vas te prendre une belle exception (ou meme un NaN). AMHA, compiler directement du code entré par l'utilisateur enfreint la regle n°1 ("don't trust user input") et c'est pas bien. Coder un petit parser simple s'impose (en plus ca t'évitera d'émettre un assembly à l'exécution, ce qui est sacrement consommateur), et si tu te limites aux operations simples, ca ne devrait pas etre bien compliqué.

  11. #11
    Membre émérite Avatar de neptune
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 835
    Par défaut
    Citation Envoyé par SirJulio Voir le message
    On dirait pas vu que le resultat est correct. Si un int etait passé au milieu, on aurait un resultat du genre 3.000. Le runtime doit detecter le cast, et casté preventivement les deux int en floats.
    Oui, le résultat est correct, vu qu'il cast les ints en float. Ma remarque allait à l'encontre des casts, complètement inutile vu qu'il suffit de suffixer le litéral pour avoir directement le bon type.

  12. #12
    Membre Expert Avatar de Tober
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2007
    Messages
    824
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 824
    Par défaut
    Ouais, mais si t'as deux variables int que tu divises, tu peux pas faire genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int x = 10, y = 3;
    int res = xF / yF;
    donc le cast est obligatoire dans la plupart des cas !

  13. #13
    Membre émérite Avatar de neptune
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 835
    Par défaut
    Tober: bien-sûr, mais dans la demane initiale il était question de litéraux et non de variables...

  14. #14
    Membre Expert Avatar de Tober
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2007
    Messages
    824
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 824
    Par défaut
    C'est pas faux
    Mais secretement, j'ai cru que tu trouverais une solution a l'absurdite que j'avais mise

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

Discussions similaires

  1. Pourquoi le résultat est 0? Petit souci
    Par Margueritian dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 17/07/2012, 17h10
  2. Réponses: 1
    Dernier message: 03/06/2011, 13h44
  3. Division de deux réels avec un résultat entier
    Par Triste dans le forum Débuter
    Réponses: 7
    Dernier message: 30/11/2007, 14h23
  4. Réponses: 3
    Dernier message: 30/04/2007, 14h57
  5. Réponses: 16
    Dernier message: 18/11/2005, 13h33

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