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 :

switch et Partie entière


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Inscrit en
    Août 2008
    Messages
    1 596
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 1 596
    Par défaut switch et Partie entière
    Bonjour, j'ai un problème avec un switch qui doit me retourner une valeur entière selon un paramètre cylindree, mais malheureusement j'ai beaucoup de problemes avec mon switch :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
                    switch (cylindree)
                    {
                        case cylindree <= 125:
                            pf = 1;
                            break;
     
                        case 125 < cylindree <= 175:
                            pf = 2;
                            break;
     
                        case 175 < cylindree <= 250:
                            pf = 3;
                            break;
     
                        case 250 < cylindree <= 350:
                            pf = 4;
                            break;
     
                        case 350 < cylindree <= 500:
                            pf = 5;
                            break;
     
                        case cylindree >  500:
                            if(cylindree%500 == 0) 
                                pf = 5 + (Math.Truncate(cylindree - 500)/125);
                            else pf = 5 + (Math.Truncate(cylindree - 500) / 125) + 1; 
                            break;
                    }
    Math.Trauncate comment ca fonctionne ?

    normalement pour le calcul de la partie entiere, si la valeur apres le virgule est < 0.5 on arandit vers lla valeur avant le virgule sinon on arandit vers la valeur avant la virgule + 1 ???

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Euh... ta syntaxe pour le bloc switch est complètement fausse : tu ne peux pas mettre des conditions comme ça dans les case, ça doit être des valeurs, genre ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    switch(cylindree)
    {
        case 50:
            ...
            break;
     
        case 125:
            ...
            break;
     
        case 500:
            ...
            break;
     
        default:
            ...
            break;
    }
    Mais évidemment dans ton cas ce n'est pas adapté, tu ne vas écrire un case pour chaque valeur possible... Dans un cas comme ça, utilise une série de if/else :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    if (cylindree <= 125)
    {
        pf = 1;
    }
    else if (cylindree <= 175)
    {
        pf = 2;
    }
    else if (cylindree <= 250)
    {
        pf = 3;
    }
    ...
    else
    {
    ...
    }
    En ce qui concerne le Truncate : dans ton code tu l'appliques à cylindree - 500, et non à (cylindree - 500)/125. Les parenthèses sont mal placées.
    Truncate tronque un nombre décimal, c'est à dire que ça supprime la partie décimale, sans arrondir. Pour l'arrondi, utilise Math.Round

  3. #3
    Membre confirmé Avatar de deejay2221
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    98
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2006
    Messages : 98
    Par défaut
    Comme Tomlev le dit, tu ne peux pas mettre des conditions comme celles-là et non pas seulement dans les switch.

    Par exemple, ce code-là ne compile pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var a = 2;
    if (1 < a < 3)
    {
        // ...
    }
    Le langage interprète cette ligne comme la suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ((bool)(1 < a)) < 3
    // alors on ne peut vérifier si (true < 3)

  4. #4
    Membre éprouvé
    Inscrit en
    Août 2008
    Messages
    1 596
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 1 596
    Par défaut
    mais non, mon but c'est de tronquer : (cylindree-500)/125

  5. #5
    Membre Expert 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
    Par défaut
    salut,

    pour tronquer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    (Math.Truncate((cylindree - 500)/125));
    tu tronquais cylindree-500 et ensuite tu divisais par 125. La division par 125 n'est pas souvent entière...
    n'est pas adapté dans ton cas à mon avis... Je m'explique :
    ça veut dire que la cylindrée est 500k ou k est un réel. si k = 0 tu vas la condition est bonne.
    Dans ton cas Math.Round(cylindrée/500); te donne le bon pf...

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par Msysteme Voir le message
    normalement pour le calcul de la partie entiere, si la valeur apres le virgule est < 0.5 on arandit vers lla valeur avant le virgule sinon on arandit vers la valeur avant la virgule + 1 ???
    Citation Envoyé par Msysteme Voir le message
    mais non, mon but c'est de tronquer : (cylindree-500)/125
    Ben faudrait savoir... si tu veux tronquer, c'est Truncate, si tu veux arrondir c'est Round

  7. #7
    Expert confirmé

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Par défaut
    Citation Envoyé par Msysteme
    mais non, mon but c'est de tronquer : (cylindree-500)/125
    Donc, en gros, tu veux faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Math.Truncate((cylindree - 500)/125)
    Donc, ce que te disais tom

    Citation Envoyé par tomlev
    En ce qui concerne le Truncate : dans ton code tu l'appliques à cylindree - 500, et non à (cylindree - 500)/125. Les parenthèses sont mal placées.

    Mon Blog

    The Cake is still a lie !!!



    Vous voulez contribuer à la rubrique .NET ? Contactez-moi par MP.
    Vous voulez rédiger des articles pour la rubrique .NET ? Voici la procédure à suivre.

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

Discussions similaires

  1. partie décimale / partie entière
    Par NoBru dans le forum Access
    Réponses: 3
    Dernier message: 21/10/2005, 12h00
  2. Partie entière
    Par pmboutteau dans le forum ASP
    Réponses: 6
    Dernier message: 29/09/2005, 11h09
  3. UDF-Interbase qui renvoie la partie entière d'un décimal
    Par mondelphi dans le forum InterBase
    Réponses: 2
    Dernier message: 20/06/2005, 16h46
  4. partie entière supérieure
    Par pmboutteau dans le forum ASP
    Réponses: 3
    Dernier message: 10/03/2005, 10h31
  5. Fonction retournant la partie entière d'un nombre
    Par annedjomo dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 12/11/2004, 15h58

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