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

VB.NET Discussion :

Pourquoi j'ai deux resultats différents


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

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

    Informations forums :
    Inscription : Juin 2005
    Messages : 608
    Par défaut Pourquoi j'ai deux resultats différents
    Bonjour,
    Voila, je galère depuis quelque temps sur quelque chose d'à priori trivial mais que je ne saisis pas

    Dans mon appli, j'ai 2 valeurs S et C entrées a la main dont les plages sont les suivantes :
    S : -11.00 à +6.00
    C : -6.00 à +6.00

    selon 2 cas, je dois afficher des valeurs dans des textbox appelées SIMAGE et CIMAGE selon :
    (Je ne traiterai que le cas de SIMAGE car c'est lui qui me pose probleme)

    Cas 1 : S < "0.00" et C < "0.00"
    SIMAGE = S + ajouts

    Cas 2 : S < "0.00" et C = "0.00"
    SIMAGE = S + ajouts

    j'ai fait ceci : (.valS est défini précédemment dans le code)
    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
     'Traitement de SIMAGE
                'plage de S : +6.00 à -11.00 bornes comprises 
                ‘traitement de la valeur de ajouts
                Dim ajouts As Double
                Select Case .valS
                    Case Is > -6     ' entre -5.99 et +6.00
                        ajouts = 0
                    Case Is > -7     ' entre -6.00 et -6.99
                        ajouts = 0.25
                    Case Is > -8.5  ' entre -7.00 et -8.49
                        ajouts = 0.5
                    Case Is > -9.5  ' entre -8.50 et -9.49 
                        ajouts = 0.75
                    Case Is > -10.5 ' entre -9.49 et -10.49 
                        ajouts = 1
                    Case Else         ' entre -10.50 et -11.00
                        ajouts = 1.25
                End Select
     
                If S.Text < "0" And C.Text < "0" Then
                    SIMAGE.Text = (.valS + ajouts).ToString("0.00")
                    'on passe en VERT si ajout <> 0
                    If ajouts <> 0 Then
                        SIMAGE.BackColor = Color.DarkGreen
                        LabelWL.Visible = True
                        RectangleShapeWL.Visible = True
                    Else
                        SIMAGE.BackColor = Color.LightSlateGray
                        LabelWL.Visible = False
                        RectangleShapeWL.Visible = False
                    End If
                End If
     
                If S.Text < "0" And C.Text = "0" Then
                    SIMAGE.Text = (.valS + ajouts).ToString("0.00")
                    'on passe en VERT si ajout <> 0
                    If ajouts <> 0 Then
                        SIMAGE.BackColor = Color.DarkGreen
                        LabelWL.Visible = True
                        RectangleShapeWL.Visible = True
                    Else
                        SIMAGE.BackColor = Color.LightSlateGray
                        LabelWL.Visible = False
                        RectangleShapeWL.Visible = False
                    End If
                End If
    dans les 2 cas j'ai S < 0 et SIMAGE.Text = (.valS + ajouts).
    Seule la valeur de C diffère. Je devrais donc avoir la même valeur de SIMAGE pour les 2 cas.

    Eh bien non

    Exemple : S = -7.5 et C = -4.5
    me donne SIMAGE = -7.00 ce qui est juste

    Je laisse S à -7.5 et passe C à 0 pour le second cas
    j'obtiens SIMAGE = -7.50 soit SIMAGE = S

    Jai la berlue ou que se passe t'il ????????
    Merci bien

  2. #2
    Membre émérite Avatar de -N4w4k-
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2011
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 545
    Par défaut
    Bonjour,
    j'ai essayé ton bout de code, remanié pour que ça marche chez moi, et ça marche... les résultats sont les mêmes pour les cas que tu cites (contrairement à toi..)
    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
            Dim info As Globalization.NumberFormatInfo = Globalization.NumberFormatInfo.CurrentInfo.Clone
            info.NumberDecimalSeparator = "."
     
            Dim S, C, SIMAGE As New TextBox
            Dim valS, ajouts As Decimal
     
            S.Text = "-7.5"
            C.Text = "-4.5"
            valS = Decimal.Parse(S.Text, info)
     
            Select Case valS
                Case Is > -6     ' entre -5.99 et +6.00
                    ajouts = 0
                Case Is > -7     ' entre -6.00 et -6.99
                    ajouts = 0.25
                Case Is > -8.5  ' entre -7.00 et -8.49
                    ajouts = 0.5
                Case Is > -9.5  ' entre -8.50 et -9.49 
                    ajouts = 0.75
                Case Is > -10.5 ' entre -9.49 et -10.49 
                    ajouts = 1
                Case Else         ' entre -10.50 et -11.00
                    ajouts = 1.25
            End Select
     
            If S.Text < "0" And C.Text < "0" Then
                SIMAGE.Text = (valS + ajouts).ToString()
            End If
     
            If S.Text < "0" And C.Text = "0" Then
                SIMAGE.Text = (valS + ajouts).ToString()
            End If
     
            MsgBox("SIMAGE=" + SIMAGE.Text)
    Résultat:
    C.Text = "-4,5" ou C.Text = "0" ==> SIMAGE.Text = "-7,0"

    Est ce que j'obtiens les bons résultats ?

  3. #3
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 198
    Par défaut
    un string ne se compare pas comme un nombre
    ton < "0" vérifie si par ordre alphabétique c'est le cas ou non

    Cas 2 : S < "0.00" et C = "0.00"
    And C.Text = "0"
    rien que ca, ca me choque
    un string qui contient "0.00" si tu marque if lestring = "0" ca va retourner false car "0" est différent de "0.00"
    donc es-tu sûr de vouloir faire des comparaison de string ??
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  4. #4
    Membre éclairé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

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

    Informations forums :
    Inscription : Juin 2005
    Messages : 608
    Par défaut
    En fait je ne suis pas sur du tout de vouloir comparer des string, ce qui 'minteresse ce sont les valeurs affichées dans les textbox S et C mais si je ne mets pas le tostring("0.00") je n'ai pas mon affichage a 2 decimales

    J'avais bien essaye avec "0.00" en lieu et place de "0" mais meme resultat

    Merci -N4w4k-, je regarde attentivement ce que tu as remanié et oui tu obtiens les bons resultats

  5. #5
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 198
    Par défaut
    si c'est la valeur en tant que nombre contenu dans le textbox que tu veux manipuler, il faut transformer le string en nombre, et voir un cours sur les bases de vb.net tel celui ci : http://plasserre.developpez.com/cours/vb-net/
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

Discussions similaires

  1. Même requete, deux resultats différents
    Par Le gris dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 05/06/2015, 12h17
  2. Réponses: 3
    Dernier message: 11/07/2005, 15h20
  3. [ADO.Net][VB.NET] Comment copier des données entre deux BDD différentes ?
    Par maddog2032 dans le forum Accès aux données
    Réponses: 6
    Dernier message: 06/06/2005, 11h01
  4. enregistrer deux variable différente dans un seul champs
    Par developpeur_mehdi dans le forum Bases de données
    Réponses: 7
    Dernier message: 07/03/2004, 23h18
  5. [date] Comparer deux formats différents
    Par terziann dans le forum Requêtes
    Réponses: 17
    Dernier message: 21/07/2003, 15h21

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