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

Windows Forms Discussion :

Pas de décimale sur calculatrice


Sujet :

Windows Forms

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    chaumeur
    Inscrit en
    Mars 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Belgique

    Informations professionnelles :
    Activité : chaumeur

    Informations forums :
    Inscription : Mars 2015
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Pas de décimale sur calculatrice
    Bonsoir alors voila mon soucis, j'essaye actuellement de me faire une petite calculatrice perso Dans l'enssemble elle fonctionne seul soucis c'est que je n'ai pas de décimale :/

    Exemple : 7 / 2 = 3

    Quand je veux par exemple faire :

    2,5 * 3 il me marque une exception et sa plante

    Je vous met le code du = ( le calcule se fait quand j'appuye sur =) :
    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
    29
    30
    31
      private void btn_egal_Click(object sender, EventArgs e)
            {
     
                int a = Convert.ToInt32(textBox1.Text);
                int b = Convert.ToInt32(textBox_result2.Text);
     
     
                // Addition
                if (textBox_signe.Text == "+")
                {
                    textBox_final.Text = Convert.ToString(a + b);
                }
     
                // Multiplication
                if (textBox_signe.Text == "*")
                {
                    textBox_final.Text = Convert.ToString(a * b);
                }
     
                // soustraction
                if (textBox_signe.Text == "-")
                {
                    textBox_final.Text = Convert.ToString(a - b);
                }
     
                // Division
                if (textBox_signe.Text == "/")
                {
                    textBox_final.Text = Convert.ToString(a / b);
                }
            }
    Si besoin des autre code dite le moi je le posterai ^^

    Je suis vraiment debutant ( aucune connaissance dans aucun language^^) je fait juste sa pour apprendre et comprendre un peux le language

    Je vous remercie d'avance

  2. #2
    Membre chevronné
    Avatar de PixelJuice
    Homme Profil pro
    Ingénieur .NET & Game Designer
    Inscrit en
    Janvier 2014
    Messages
    640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur .NET & Game Designer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2014
    Messages : 640
    Points : 2 149
    Points
    2 149
    Par défaut
    Bonjour,

    c'est tout a fait normal car tes deux variables sont de type int.

    En C# (et dans beaucoup d'autre langages aussi) ,le fait de diviser deux entiers revient a faire une simple division euclidienne, et ça ne retiendra que le quotient.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    7/2 = 3, reste 1
    Donc 7/2 = 3
    On ne peut diviser 1 par 2 car le type int ne peut avoir de précision décimale.

    il te faudra donc changer ton code pour utiliser des float ou des double, selon la précision que tu souhaites.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                float a = Convert.ToSingle(textBox1.Text);
                float b = Convert.ToSingle(textBox_result2.Text);

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    chaumeur
    Inscrit en
    Mars 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Belgique

    Informations professionnelles :
    Activité : chaumeur

    Informations forums :
    Inscription : Mars 2015
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    merci PixelJuice Sa fonctionne nickel :-)

    Je voudrai aussi un avis sur mon code, car je suis pas pro et voudrai savoir si il est propre .

    Et peut etre d'autre façon de le faire, j'explique grosso modo comment j'ai proceder au niveau des textbox avant de metre le code ^^ :
    -j'ai créé une textbox ( textbox1) pour les premier chiffre
    - ensuite j'ai une textbox( textbox_signe) pour les operateur(-,*,+,/ )
    Ensuite une troisieme textbox pour les deuxieme chiffre de l'operation
    Et enfin une textbox pour le resultat :-)

    en gros a partir du moment ou on a cliquer sur une operation, quand on cliquera sur un chiffre ou virgule elle se mettra dans la deuxieme textbox de l'operation :-)

    Je sais que se code ne permet que de faire des calcul simple a une operation

    J'en ferais une plus complexe par apres c'est juste pour apprendre en faite

    Voici le code de la calculatrice :

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
     
    namespace WindowsFormsApplication1
    {
        public partial class Form2 : Form
        {
            public Form2()
            {
                InitializeComponent();
            }
     
            private void btn_0_Click(object sender, EventArgs e)
            {
                //si un signe est placer, la valeur est ajoutée dans le deuxieme TB
                if (textBox_signe.Text != "")
                {
                    textBox_result2.Text += (0);
                }
                // si non dans le premier
                else
                    textBox1.Text += (0);
     
            }
     
            private void btn_1_Click(object sender, EventArgs e)
            {
                //si un signe est placer, la valeur est ajoutée dans le deuxieme TB
                if (textBox_signe.Text != "")
                {
                    textBox_result2.Text += (1);
                }
                // si non dans le premier
                else
                    textBox1.Text += (1);
            }
     
            private void btn_2_Click(object sender, EventArgs e)
            {
                //si un signe est placer, la valeur est ajoutée dans le deuxieme TB
                if (textBox_signe.Text != "")
                {
                    textBox_result2.Text += (2);
                }
                // si non dans le premier
                else
                    textBox1.Text += (2);
            }
     
            private void btn_3_Click(object sender, EventArgs e)
            {
                //si un signe est placer, la valeur est ajoutée dans le deuxieme TB
                if (textBox_signe.Text != "")
                {
                    textBox_result2.Text += (3);
                }
                // si non dans le premier
                else
                    textBox1.Text += (3);
            }
     
            private void btn_4_Click(object sender, EventArgs e)
            {
                //si un signe est placer, la valeur est ajoutée dans le deuxieme TB
                if (textBox_signe.Text != "")
                {
                    textBox_result2.Text += (4);
                }
                // si non dans le premier
                else
                    textBox1.Text += (4);
            }
     
            private void btn_5_Click(object sender, EventArgs e)
            {
                //si un signe est placer, la valeur est ajoutée dans le deuxieme TB
                if (textBox_signe.Text != "")
                {
                    textBox_result2.Text += (5);
                }
                // si non dans le premier
                else
                    textBox1.Text += (5);
            }
     
            private void btn_6_Click(object sender, EventArgs e)
            {
                //si un signe est placer, la valeur est ajoutée dans le deuxieme TB
                if (textBox_signe.Text != "")
                {
                    textBox_result2.Text += (6);
                }
                // si non dans le premier
                else
                    textBox1.Text += (6);
            }
     
            private void btn_7_Click(object sender, EventArgs e)
            {
                //si un signe est placer, la valeur est ajoutée dans le deuxieme TB
                if (textBox_signe.Text != "")
                {
                    textBox_result2.Text += (7);
                }
                // si non dans le premier
                else
                    textBox1.Text += (7);
            }
     
            private void btn_8_Click(object sender, EventArgs e)
            {
                //si un signe est placer, la valeur est ajoutée dans le deuxieme TB
                if (textBox_signe.Text != "")
                {
                    textBox_result2.Text += (8);
                }
                // si non dans le premier
                else
                    textBox1.Text += (8);
            }
     
            private void btn_9_Click(object sender, EventArgs e)
            {
                //si un signe est placer, la valeur est ajoutée dans le deuxieme TB
                if (textBox_signe.Text != "")
                {
                    textBox_result2.Text += (9);
                }
                // si non dans le premier
                else
                    textBox1.Text += (9);
            }
     
            private void btn_virg_Click(object sender, EventArgs e)
            {
     
                //si un signe est placer, la valeur est ajoutée dans le deuxieme TB
                if (textBox_signe.Text != "")
                {
                    textBox_result2.Text += ",";
                }
                // si non dans le premier
                else
                    textBox1.Text += ",";
            }
     
            private void btn_divi_Click(object sender, EventArgs e)
            {
                textBox_signe.Text += "/";
     
                if (textBox_signe.Text != "")
                {
                    // On ne peux metre que un signe dans la case de signe.
                    btn_divi.Enabled = false;
                    btn_multi.Enabled = false;
                    btn_moin.Enabled = false;
                    btn_plus.Enabled = false;
                }
            }
     
            private void btn_multi_Click(object sender, EventArgs e)
            {
                textBox_signe.Text += "*";
                if (textBox_signe.Text != "")
                {
                    // On ne peux metre que un signe dans la case de signe.
                    btn_divi.Enabled = false;
                    btn_multi.Enabled = false;
                    btn_moin.Enabled = false;
                    btn_plus.Enabled = false;
                }
            }
     
            private void btn_moin_Click(object sender, EventArgs e)
            {
                textBox_signe.Text += "-";
                if (textBox_signe.Text != "")
                {
                    // On ne peux metre que un signe dans la case de signe.
                    btn_divi.Enabled = false;
                    btn_multi.Enabled = false;
                    btn_moin.Enabled = false;
                    btn_plus.Enabled = false;
                }
            }
     
            private void btn_plus_Click(object sender, EventArgs e)
            {
                textBox_signe.Text += "+";
                if (textBox_signe.Text != "")
                {
                    // On ne peux metre que un signe dans la case de signe.
                    btn_divi.Enabled = false;
                    btn_multi.Enabled = false;
                    btn_moin.Enabled = false;
                    btn_plus.Enabled = false;
                }
            }
     
            private void btn_effacer_Click(object sender, EventArgs e)
            {
                textBox1.Clear();
                textBox_signe.Clear();
                textBox_result2.Clear();
                textBox_final.Clear();
     
                btn_divi.Enabled = true;
                btn_multi.Enabled = true;
                btn_moin.Enabled = true;
                btn_plus.Enabled = true;
            }
     
            private void btn_egal_Click(object sender, EventArgs e)
            {
     
                float a = Convert.ToSingle(textBox1.Text);
                float b = Convert.ToSingle(textBox_result2.Text);
     
     
                // Addition
                if (textBox_signe.Text == "+")
                {
                    textBox_final.Text = Convert.ToString(a + b);
                }
     
                // Multiplication
                if (textBox_signe.Text == "*")
                {
                    textBox_final.Text = Convert.ToString(a * b);
                }
     
                // soustraction
                if (textBox_signe.Text == "-")
                {
                    textBox_final.Text = Convert.ToString(a - b);
                }
     
                // Division
                if (textBox_signe.Text == "/")
                {
                    textBox_final.Text = Convert.ToString(a / b);
                }
            }
     
        }
    }
    Merci d'avance ^^

  4. #4
    Membre chevronné
    Avatar de PixelJuice
    Homme Profil pro
    Ingénieur .NET & Game Designer
    Inscrit en
    Janvier 2014
    Messages
    640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur .NET & Game Designer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2014
    Messages : 640
    Points : 2 149
    Points
    2 149
    Par défaut
    Bonjour,

    Il y a toujours moyen d’améliorer un programme, même pour une simple calculette :

    Déjà premier réflexe :

    Quand tu vois qu'un code reviens encore et toujours, demandes-toi toujours si tu ne peux pas factorisé la partie commune pour en faire une seul et même méthode.

    (Un prof a moi disait qu'on ne devait jamais avoir a copier/collé le même code)

    Du coup, toutes les méthodes d'appui sur le pavé numérique de ta calculette pourraient se résumer a une seule et même méthode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
            private void btn_num_Click(object sender, EventArgs e)
            {
                // On récupère le bouton responsable de l'evenement Click
                Button button = (Button)sender;
     
                //si un signe est placer, la valeur est ajoutée dans le deuxieme TB
                if (textBox_signe.Text != "")
                {
                    textBox_result2.Text += button.Tag;
                }
                // si non dans le premier
                else
                    textBox1.Text += button.Tag;
            }
    Tu assignes cette méthode a l’événement Click de chacun de tes boutons numériques (1, 2, 3, ... 9) , puis tu assignes a ces derniers leur valeurs dans leur propriétés Tag et tu as déjà enlever un gros morceau de code.

    La propriété Tag permet d'assigner une valeur a un bouton. Du coup c'est très utile pour savoir que le boutton "2" renverra 2.

    Tu peux aussi faire la même chose avec les signes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
            private void btn_signe_Click(object sender, EventArgs e)
            {
                Button button = (Button)sender;
                textBox_signe.Text +=button.Tag;
                if (textBox_signe.Text != "")
                {
                    // On ne peux metre que un signe dans la case de signe.
                    btn_divi.Enabled = false;
                    btn_multi.Enabled = false;
                    btn_moin.Enabled = false;
                    btn_plus.Enabled = false;
                }
            }
    Idéalement aussi, il faut séparer tout ce qui est calcul dans une autre classe (qui s’appellerait Calcul par exemple), car il faut que chaque classe fasse exactement son boulot et rien d'autre. Entre autres :

    - Une Form ne fait qu'afficher des valeurs et manipuler ses contrôles.
    - Une classe Calcul qui s'occupe que des calculs.

    Mais dans ton exemple, ce n'est pas forcement évident et productif, mais garde ça a l'esprit pour des projets plus conséquent.

    Pense aussi a toujours donner des noms explicites a tous tes contrôles et variables. La encore tu ne verras pas trop l'utilité mais a l'avenir ça sera vitale.


    Voila c'est a peu près tout. iI y a encore d'autres améliorations possible mais ça implique des notions avancées et te prendre la tête avec directement serait assez contre-productif.

Discussions similaires

  1. disque dur installé mais pas d'icône sur le bureau
    Par stephan1 dans le forum Composants
    Réponses: 2
    Dernier message: 14/12/2005, 10h17
  2. [Débat] Utiliser ou pas les frames sur un site ?
    Par nico_web dans le forum Webdesign & Ergonomie
    Réponses: 15
    Dernier message: 12/10/2005, 20h54
  3. Pas de corbeille sur le bureau
    Par daladim dans le forum Windows XP
    Réponses: 5
    Dernier message: 02/10/2005, 20h54
  4. [Access] Ne pas montrer #Error sur un rapport Access
    Par nico33307 dans le forum Access
    Réponses: 3
    Dernier message: 22/09/2005, 23h19
  5. [CSS][IE]background d'affiche pas dans div sur IE
    Par Thomzz dans le forum Mise en page CSS
    Réponses: 7
    Dernier message: 21/09/2005, 23h32

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