none
La division avec un chiffre décimal RRS feed

  • Question

  • Bonjour,

    Ma question est sans doute naïve. J'aimerais comprendre.

    Le compilateur "dit": L'exception InvalidCastException n'a pas été gérée

    La conversion de la chaîne  en type double n'est pas valide.

    Mon code:

    Dim GG AS Double

    Dim HH AS Double

    GG = CDbl (G.Text)

    HH = CDnl (H.Text)

    Division.Text = (Cint(GG) / Cint(HH))

    Quand le chiffre est un "entier" exp: 2,3,500,ect... Le résultat est bon.

    Quand le chiffre est "décimal " exp: 1.5; 1.8 ; ect .. Le résultat ne peut s'afficher et le compilateur exprime les propos précités.

    Pouvez vous m'expliquer simplement Pourquoi ?

    Et comment écrire le code ?

    Merci ! par avance.

    • Déplacé Gilles TOURREAUModerator jeudi 17 juin 2010 11:02 (Origine :Installation et Activation de Visual Studio Express Editions)
    jeudi 17 juin 2010 07:07

Réponses

  • Bonjour,

     

    Essayez à partir de cet exemple :

     

            Dim a As Double

            Dim b As Double

     

            Dim convert_a As Boolean

            Dim convert_b As Boolean

            convert_a = Double.TryParse("10.2", a)

            convert_b = Double.TryParse("5.1", b)

     

            Dim result As String

            If convert_a And convert_b Then

                result = (a / b).ToString()

     

            End If

     

     

    Remarquez ces aspects:

    1.   On utilise Double.TryParse pour convertir la valeur texte et pour vérifier si la conversion est possible

    2.   Si la conversion est faite, on fait la division et on transforme le résultat in String

     

    Cordialement,

    Alex

    __________________________________________________________________________________________

    Publiez un article sur une de ces technologies : Visual Basic, C#, C++, .NET, ASP.NET, SQL Server, Silverlight, SharePoint 2010, SharePoint 2007

     

    Astuces pour Visual Studio 2010

    Didacticiels et astuces : VB.NET, C#, ASP.NET, .NET Framework, Workflow Foundation

     

     

    Café des usages

     

    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

     

     

     

     

    lundi 21 juin 2010 12:42

Toutes les réponses

  • Bonjour,

    .NET est très rigoureux dans la convertion des types :

    Division.Text = Convert.ToString(Cint(GG) / Cint(HH))

    Cordialement


    Gilles TOURREAU - MVP C# - MCTS Windows Forms - Architecte .NET/Consultant/Formateur - http://gilles.tourreau.fr
    jeudi 17 juin 2010 10:29
    Modérateur
  •  

    Bonjour

    Je propose une solution qui n'est que l'utilisation du .net car Cint étant tiré du VB6, il est toujours supporté par le .Net mais moins rapide (optimiser)

    Division.Text = Convert.ToString(Integer.Parse(GG) / Integer.Parse(HH))
    

     

    A bientot

     


    Cordialement, Troxsa
    jeudi 17 juin 2010 13:13
    Auteur de réponse
  • Bonjour et merci pour la réponse.

    en fait mon erreur se situe au niveau de HH:(la cause est le point au lieu de la virgule)

    HH= CDbl (H.Text)   (CDbl et non CDnl comme indiqué dans ma question)

    En rentrant directement un chiffre avec la virgule ça marche mais pas avec le point .

    Alors comment faire quand le calcul hérite d'une valeur ? exp: HH=321/1.5

    Merci

    jeudi 17 juin 2010 15:54
  • Bonjour et merci pour la réponse.

    en fait mon erreur se situe au niveau de HH:(la cause est le point au lieu de la virgule)

    HH= CDbl (H.Text)   (CDbl et non CDnl comme indiqué dans ma question)

    En rentrant directement un chiffre avec la virgule ça marche mais pas avec le point .

    Alors comment faire quand le calcul "hérite" d'une valeur ? exp: HH=321/5

    Merci M.Troxsa

    jeudi 17 juin 2010 15:56
  • Bonjour et merci pour la réponse.

    en fait mon erreur se situe au niveau de HH:(la cause est le point au lieu de la virgule)

    HH= CDbl (H.Text)   (CDbl et non CDnl comme indiqué dans ma question)

    En rentrant directement un chiffre avec la virgule ça marche mais pas avec le point .

    Alors comment faire quand le calcul "hérite" d'une valeur ? exp: HH=321/1.5

    Merci M.Troxsa

    vendredi 18 juin 2010 05:09
  • Bonjour,

     

    D'après ce que je comprend c'est que vous avez un N° qui est séparé par des virgules et des points, les virgules servant a délimité les milliers et les centaines de milliers, puis le points servant a délimité les décimals

    Dans certain cas il arrive qu'il n'existe pas de séparateur de centaine de milliers (la virgule) et que cette virgule serve de séparateur de décimal

    Et encore dans d'autre cas ou toute virgules est séparateur de tout forma

    Le compilateur n'a que deux mode de fonctionnement (Auto, Manuel) sans entrer trop dans les details je vais donner la solution qui me semble la plus pratique

     

        Dim GG As Double
        Dim HH As Double
    
        GG = Double.Parse("321")
        HH = Double.Parse("1.5".Replace(".", ","))
    
        Dim Resultat As String = (CInt(GG) / CInt(HH))

    Le mieux serait d'utiliser la methode du lien que je vous ai donné

     

    A bientot

     

     

     


    Cordialement, Troxsa
    • Proposé comme réponse TroxsaEditor vendredi 18 juin 2010 08:33
    • Marqué comme réponse Alex Petrescu vendredi 18 juin 2010 13:37
    • Non marqué comme réponse Alex Petrescu vendredi 18 juin 2010 13:37
    vendredi 18 juin 2010 07:33
    Auteur de réponse
  • Bonjour Troxsa,

    C'est bien cela,  tout fonctionne.

    J'ai bataillé pour comprendre et trouver les bons codes ; un peu (et même beaucoup d'aide) sont appréciables.

    Merci

    vendredi 18 juin 2010 08:28
  •   Bonjour ,

    Je me suis réjoui trop tôt, dans mon résultat je ne veux pas "321" mais la valeur numérique de GG/HH. Ici, la valeur trouvée est 321/1.5=160.5

    Je pense qu'en ce qui concerne la conversion du point en virgule c'est bien.

        Dim GG As Double
        Dim HH As Double

        GG = Double.Parse("321")
        HH = Double.Parse("1.5".Replace(".", ","))

    Merci encore.

    vendredi 18 juin 2010 09:05
  •  

    cBonjour,

     

    C'est normal, c'est le type du résultat qui fausse tout, il faut tout mettre en double et pas du integer :)

     

     

        Dim GG As Double
        Dim HH As Double
    
        GG = Double.Parse("321")
        HH = Double.Parse("1.5".Replace(".", ","))
    
        Dim Resultat As String = (Double.Parse(GG) / Double.Parse(HH))
    Le résultat est bien :  321/1.5=214

     

    c'est bien ça ce que vous souhaitez ?


    Cordialement, Troxsa
    vendredi 18 juin 2010 11:52
    Auteur de réponse
  • Bonjour,

    Je suis désolé.

    Je reprends mon Mon code du début:

    Je vais essayer de mieux m'expliquer.

    Dim GG AS Double

    Dim HH AS Double

    GG = CDbl (G.Text)  Ce sont ces valeurs ( G .Text )  ici le dividande valeur décimale ou pas (.ou,)

    HH = CDnl (H.Text)             "                  ( H .Text )  ici le diviseur que je souhaite utiliser que ce

     soit des valeurs décimales ou pas avec ( .ou,)

       Dim Resultat As String = (Double.Parse(GG) / Double.Parse(HH))

    Division.Text = Resultat

    Je vous remercie pour votre aide.

     

    vendredi 18 juin 2010 12:57
  • Bonjour,

     

    Essayez à partir de cet exemple :

     

            Dim a As Double

            Dim b As Double

     

            Dim convert_a As Boolean

            Dim convert_b As Boolean

            convert_a = Double.TryParse("10.2", a)

            convert_b = Double.TryParse("5.1", b)

     

            Dim result As String

            If convert_a And convert_b Then

                result = (a / b).ToString()

     

            End If

     

     

    Remarquez ces aspects:

    1.   On utilise Double.TryParse pour convertir la valeur texte et pour vérifier si la conversion est possible

    2.   Si la conversion est faite, on fait la division et on transforme le résultat in String

     

    Cordialement,

    Alex

    __________________________________________________________________________________________

    Publiez un article sur une de ces technologies : Visual Basic, C#, C++, .NET, ASP.NET, SQL Server, Silverlight, SharePoint 2010, SharePoint 2007

     

    Astuces pour Visual Studio 2010

    Didacticiels et astuces : VB.NET, C#, ASP.NET, .NET Framework, Workflow Foundation

     

     

    Café des usages

     

    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

     

     

     

     

    lundi 21 juin 2010 12:42
  • Bonjour Alex,

    Merci pour votre réponse précise .

    Le code ci dessous permet de tracer "ma fameuse courbe" dans un PictureBox.

    Les résultats ne sont pas encore tout à fait au point ,Il y a un problème d'échelle que je n'ai pas encore maîtrisé.

    Peut être que dans un Panel ce serait mieux ?

    Dim newBitmap As Bitmap = New Bitmap(645, 325)

     

    Dim g As Graphics = Graphics.FromImage(newBitmap)

     

    Dim s As New Pen(Color.Black, 1.5)

    Dim points(N) As System.Drawing.Point

     

    'Dim gene(N) As System.Drawing.Point

     

     

    For I As Integer = 0 To N

    d = ((dm) * (Math.Cos(360 * F / N * I)))

    'calcul diagonale intermdiaire

    y = d * (Math.Tan(Adegrs))

    'calcul gnratrice partir de l'axe

    Ryy(I) = hh + y

    'valeur de la gnratrice sur les Y

    Rxx(I) = dm * Pi / N * I

    'diamtre moyen*pi sur les X

    points(I) =

    New Point(Rxx(I), (Ryy(I)))

     

    'gene(I) = New Point(Rxx(I), Ryy(I))

     

    Next I

     

     

    g.DrawCurve(s, points)

    PictureBox.Image = newBitmap

     

    Cordialement

    mardi 22 juin 2010 07:17
  • Bonjour,

     

    En quoi consiste ce problème d’échelle ? Vous voulez agrandir votre image ? Dans ce cas, vous pouvez avoir des problèmes avec les fonctions trigonométriques qui ne modifient pas leurs valeurs proportionnellement avec la variation des arguments.

     

    Pour redimensionner l’image après l’avoir dessine, je vous propose ce didacticiel :

    http://social.msdn.microsoft.com/Forums/fr-FR/vbasicfr/thread/21f7930e-c86c-4bac-9afd-2d31cb2a4aaa

     

     

    Cordialement,

    Alex

    __________________________________________________________________________________________

    Publiez un article sur une de ces technologies : Visual Basic, C#, C++, .NET, ASP.NET, SQL Server, Silverlight, SharePoint 2010, SharePoint 2007

     

    Astuces pour Visual Studio 2010

    Didacticiels et astuces : VB.NET, C#, ASP.NET, .NET Framework, Workflow Foundation

     

     

    Café des usages

     

    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

     

     

     

     

    mardi 22 juin 2010 12:00
  • Bonjour,

    Effectivement, mon souhait est de modifier la taille de l'image.

    Le lien que vous m'avez envoyé semble correspondre exactement à mon attente.

    Il ne me reste plus qu'à l'appliquer dans mon programme et là commence une nouvelle difficulté.

    Mais c'est mon but réfléchir et essayer de comprendre.

    Merci de votre aide toujours précise , compétante et de ce fait précieuse.

    Cordialement.

    mercredi 23 juin 2010 07:44
  • Bonjour et merci pour l’appréciationJ. N’hésitez pas d’ouvrir un nouveau thread si vous rencontrez d’autres problèmes dans votre projet.

     

    Cordialement,

    Alex

    __________________________________________________________________________________________

    Publiez un article sur une de ces technologies : Visual Basic, C#, C++, .NET, ASP.NET, SQL Server, Silverlight, SharePoint 2010, SharePoint 2007

     

    Astuces pour Visual Studio 2010

    Didacticiels et astuces : VB.NET, C#, ASP.NET, .NET Framework, Workflow Foundation

     

     

    Café des usages

     

    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

     

     

     

     

    mercredi 23 juin 2010 13:25