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 :

Convertir une formule en string en decimal


Sujet :

VB.NET

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2006
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2006
    Messages : 142
    Points : 74
    Points
    74
    Par défaut Convertir une formule en string en decimal
    Bonjour,

    J'ai une formule venant d'une base de données que je récupère dans une variable string

    ex : (MT*TVA)/100

    Je remplace Mt par son montant et Tva par le sien

    J'aimerais un decimal total = CDec((MT*TVA)/100)

    Voila comment puis-je transformer ma chaine en résultat decimal ?

    Merci

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    tu fais un replace des variables par leurs valeurs
    et tu fais du sql pour faire un select (...)
    ca peut aussi se faire sur un datatable
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2006
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2006
    Messages : 142
    Points : 74
    Points
    74
    Par défaut
    C'est ce que je fais.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
          Dim mMT As Decimal = 0
          Dim mTVATaux As Decimal = 0
          Dim mFormule As String 
     
    ' je recup mes valeurs
            mMT = drEcriture.Item(6) ' valeur recup 10
            mTVATaux = drTrame.Item(8) ' valeur recup 19.6
            mFormule = drTrame.Item(6)  ' valeur récupèré = "(MT*TVA)/100"
     
     
      total = CDec(mFormule.Replace("MT", mMT).Replace("TVA", mTVATaux))
    Il me trouve une chaine qui est égale à par exemple : (10*19,6)/100
    Et cette chaine n'est pas convertible en decimal

  4. #4
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par slacky Voir le message
    C'est ce que je fais.
    Tu n'as pas du lire le message de Pol63 jusqu'au bout visiblement.

    La suite est importante :

    tu fais du sql pour faire un select (...)
    ca peut aussi se faire sur un datatable
    Accessoirement, pourquoi utiliser de vieilles verrues du VB6 comme CDec ???

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2006
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2006
    Messages : 142
    Points : 74
    Points
    74
    Par défaut
    Ok merci.

    Alors je n'ai pas compris ce que je devais faire avec le sql

    Pour ce qui est du CDec, je sais pas, il faut utiliser quoi ? Ctype(valeur, type) ?

  6. #6
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par slacky Voir le message
    Ok merci.

    Alors je n'ai pas compris ce que je devais faire avec le sql

    Pour ce qui est du CDec, je sais pas, il faut utiliser quoi ? Ctype(valeur, type) ?

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    si le string après replace est "(5/3)" tu rajoutes select devant et tu demandes à sql de l'executer
    select (5/3)
    sql server il sait répondre à ca ^^
    on (bluedeep d'ailleurs il me semble) avait trouvé une solution via l'objet datatable pour ne pas passer par sql suite à une question similaire

    Citation Envoyé par Bluedeep Voir le message
    Accessoirement, pourquoi utiliser de vieilles verrues du VB6 comme CDec ???
    moi qui utilisent de genre de vieilles verrues, la réponse est parce que c'est pratique et que ca fait la même chose ^^
    ca va plus vite à taper surtout
    cde parenthèse
    au lieu de
    de . pa parenthèse

    et sur certaines de ses fonctions ce n'est pas vb.comp.dll qui est utilisé mais bien le compilateur qui traduit en decimal.parse en gros


    donc hormis le côté poo (et encore du shared) utiliser un mot clé du compilateur ca se fait je pense ^^
    ou alors les c#iens sont juste jaloux de pas l'avoir
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  8. #8
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2006
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2006
    Messages : 142
    Points : 74
    Points
    74
    Par défaut
    Je m'en suis sorti grâce à vous merci beaucoup.

    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
     
     
          Dim mMT As Decimal = 0
          Dim mTVATaux As Decimal = 0
          Dim mFormule As String 
     
    ' je recup mes valeurs
            mMT = drEcriture.Item(6) ' valeur recup 10
            mTVATaux = drTrame.Item(8) ' valeur recup 19.6
            mFormule = drTrame.Item(6)  ' valeur récup= "(MT*TVA)/100"
     
     
      Dim total As String = Nothing
     
                total = (mFormule.Replace("MT", mMT).Replace("TVA", mTVATaux).Replace(",", "."))
     
    ' connexion sql
                Dim con As New Npgsql.NpgsqlConnection(SessionUtilisateur.mBddConn.getStrConn)
    ' commande sql
                Dim com As New Npgsql.NpgsqlCommand("select " & total & " as valeur", con)
                con.Open()
     
                Dim dr As Npgsql.NpgsqlDataReader
                dr = com.ExecuteReader()
     
                While (dr.Read)
                    total = dr.Item("valeur")
                End While
     
                con.Close()

    NB : je suis sous postgre SQL d'où le Npgsql.NpgsqlConnection

  9. #9
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Tu t'es compliqué inutilement la vie.
    Tu n'avais aucun besoin d'une connection base de données.
    Un SQL élementaire peut être exécuté à travers une DataTable.

    Exemple (à traduire en VerBeux) :
    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
    static void Main()
    {
    	Console.WriteLine(calcul("100/3 + 4"));
    	Console.ReadKey();
    }
     
    static decimal  calcul(string formule)
    {
    	using (DataTable dt = new DataTable())
    	{
    		using (DataColumn dc = dt.Columns.Add())
    		{
    			dc.DataType = typeof(decimal);
    			dc.Expression = formule;
    			DataRow r = dt.Rows.Add();
    			return (decimal)r[0];
    		}
    	}
    }

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  10. #10
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    si le string après replace est "(5/3)" tu rajoutes select devant et tu demandes à sql de l'executer
    sql server il sait répondre à ca ^^
    on (bluedeep d'ailleurs il me semble) avait trouvé une solution via l'objet datatable pour ne pas passer par sql suite à une question similaire
    Non, la solution initiale à ce problème que j'ai postée il y a de longues années (5 ou 6) sur ce forum utilisait la compilation dynamique (mais il est vrai qu'on pouvait manipuler avec cette solution des formules de calcul plus complexes avec fonction triggo, etc ....).

    Ci dessus une solutuon avec le "mini interpréteur SQL" des DataTable (qui ne permat d'utiliser de fonctions, seulement les opérations élementaires)

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  11. #11
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2006
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2006
    Messages : 142
    Points : 74
    Points
    74
    Par défaut
    Ah oui en effet ca fonctionne très bien comme ça aussi et moins compliqué.

    Merci pour votre aide.

    En VB si ça intéresse :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
       Public Function calcul(formule As String) As Decimal
     
            Dim dt As New DataTable
            Dim dc As New DataColumn
            dc.DataType = System.Type.GetType("System.Decimal")
            dc.Expression = formule
            dt.Columns.Add(dc)
            Dim dr As DataRow = dt.Rows.Add()
            Return Decimal.Parse(dr(0))
     
        End Function

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

Discussions similaires

  1. convertir une formule de type string en double
    Par SkyRhum dans le forum Débuter avec Java
    Réponses: 1
    Dernier message: 10/05/2012, 13h38
  2. [VB6] convertire une date en string
    Par acrenn dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 03/05/2006, 17h30
  3. Convertir une date en string
    Par hugo69 dans le forum Access
    Réponses: 6
    Dernier message: 28/04/2006, 17h40
  4. Réponses: 14
    Dernier message: 29/06/2005, 10h22

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