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 :

[VS.net 2005] parametre type double is nothing


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de stolx_10
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2006
    Messages
    374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 374
    Par défaut [VS.net 2005] parametre type double is nothing
    Bonjour,

    Je vais expliquer brièvement mon cas, j'espère que je vais être compris tout de suite

    alors voilà, je récupère un objet qui a pour valeur 0.
    Dans mon appli, quelque part dans le code, il est casté en string pour obtenir "0".
    Et encore plus tard, suivant le type de mon champ de ma BDD, il est de nouveau casté en divers type (suivant l'endroit où je souhaite que la valeur soit enregistrée)

    Pour mon cas, c'est le type double qui m'embête un peu.

    En effet, à un moment donné je cast mon "0" en double via CDbl(objetvalue) et j'obtiens donc 0.0

    mais dans une condition je lui demande de voir ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim ObjetValue is double
    If objetValue = Nothing Then Return "NULL"
    Et là le drame, mon objetvalue contient 0.0 mais le considère comme is nothing...
    bien entendu, je veux qu'il récupère 0.0 et non "null"

    pourquoi ?

    merci pour vos réponses



    PS : je ne veux pas connaître le type de mon objet( isnothing(objet) ), je veux connaître la valeur de l'objet. Donc si la valeur est différente de nothing, je continue mon test

  2. #2
    Membre chevronné Avatar de blade159
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2004
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 226
    Par défaut
    tu déclares un objet de type double, mais aucune affectation de valeur n'est faite (ou alors il y a plusieurs lignes entre tes 2 instructions)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim ObjetValue as double
    If objetValue = Nothing Then Return "NULL"

  3. #3
    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
    Comme le fait remarquer blade159, ta variable ObjetValue n'est pas initialisée, donc elle vaut 0. Et en VB, quand tu compares 0 avec Nothing, ça renvoie true (ce qui est d'ailleurs une aberration, mais ce n'est pas la question). En gros, il tente de convertir les valeurs pour pouvoir les comparer, et quand il convertit Nothing en double, ça donne 0.

    Normalement, pour vérifier si un objet vaut Nothing, on utilise l'opérateur Is :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If ObjetValue Is Nothing Then ...
    Et là ça fonctionne comme prévu... sauf que pour un double, ça n'a pas de sens ! Double est un type valeur (= structure, par opposition à un type référence = classe), et un type valeur ne peut pas être Nothing. Le compilateur le dit d'ailleurs : si tu essaies de tester "ObjetValue Is Nothing", il te balance une erreur.

    Tout ça pour dire que ton truc ne marche pas, mais de toutes façons il ne sert à rien

    Par contre, en base de données une colonne de type Double peut éventuellement être nulle... dans ce cas, il vaut mieux que tu utilises le type Nullable(Of Double) : c'est pareil que Double, sauf que ça peut être Nothing

  4. #4
    Membre éclairé Avatar de stolx_10
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2006
    Messages
    374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 374
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Comme le fait remarquer blade159, ta variable ObjetValue n'est pas initialisée, donc elle vaut 0. Et en VB, quand tu compares 0 avec Nothing, ça renvoie true (ce qui est d'ailleurs une aberration, mais ce n'est pas la question). En gros, il tente de convertir les valeurs pour pouvoir les comparer, et quand il convertit Nothing en double, ça donne 0.
    en fait, voici le code complet (pas long)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Function DblToSql(ByVal num As Double) As String
                If num = Nothing Then Return "NULL"
     
                Return num.ToString().Replace(",", ".")
            End Function
    num récupère la valeur 0.0 et effectivement, la comparaison renvoie true (aberration confirmée par mon chef et moi )

    Normalement, pour vérifier si un objet vaut Nothing, on utilise l'opérateur Is :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If ObjetValue Is Nothing Then ...
    Et là ça fonctionne comme prévu... sauf que pour un double, ça n'a pas de sens ! Double est un type valeur (= structure, par opposition à un type référence = classe), et un type valeur ne peut pas être Nothing. Le compilateur le dit d'ailleurs : si tu essaies de tester "ObjetValue Is Nothing", il te balance une erreur.
    effectivement, déjà testé ^^

    Tout ça pour dire que ton truc ne marche pas, mais de toutes façons il ne sert à rien

    Par contre, en base de données une colonne de type Double peut éventuellement être nulle... dans ce cas, il vaut mieux que tu utilises le type Nullable(Of Double) : c'est pareil que Double, sauf que ça peut être Nothing
    Donc si je comprends bien, là où j'ai créé mes paramètres comme double, il faudrait que je mette nullable(of double) ?

    exemple :
    dim n as double
    --> dim n as nullable(of double)

    j'attends une confirmation avant de procéder aux changements du code de mon projet (y'a pas mal de choses à modifier, là c'était juste un bout du code où ça m'arrive)

  5. #5
    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 stolx_10 Voir le message
    Donc si je comprends bien, là où j'ai créé mes paramètres comme double, il faudrait que je mette nullable(of double) ?

    exemple :
    dim n as double
    --> dim n as nullable(of double)
    Oui, enfin si tu veux gérer les colonnes Double qui peuvent être NULL...
    Ou alors il faut un paramètre supplémentaire pour indiquer si num a une valeur

  6. #6
    Membre éclairé Avatar de stolx_10
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2006
    Messages
    374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 374
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Oui, enfin si tu veux gérer les colonnes Double qui peuvent être NULL...
    oui, je pense faire comme ça
    Ou alors il faut un paramètre supplémentaire pour indiquer si num a une valeur
    j'ai compris la phrase, mais je ne vois pas comment l'appliquer

Discussions similaires

  1. Problème tlbexp.exe - VB6/VB.NET 2005 type long
    Par Tetram165 dans le forum C++/CLI
    Réponses: 1
    Dernier message: 17/09/2007, 12h17
  2. [VB.NET 2005] Erreur de type (datarow / datacolumn)
    Par hubertfabien dans le forum Windows Forms
    Réponses: 1
    Dernier message: 13/04/2007, 14h12
  3. [VB.Net 2005]Declaration de type
    Par badrel dans le forum Windows Forms
    Réponses: 3
    Dernier message: 04/11/2006, 16h39
  4. [VB.net 2005] convertir chaine de caractère en type 'date'
    Par kinganasius dans le forum Windows Forms
    Réponses: 1
    Dernier message: 18/07/2006, 23h14
  5. [LG]Convertir le type double en string
    Par @tom@ dans le forum Langage
    Réponses: 8
    Dernier message: 18/01/2004, 19h20

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