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 :

Conversion d'une valeur double incorrecte


Sujet :

VB.NET

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    351
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 351
    Points : 333
    Points
    333
    Par défaut Conversion d'une valeur double incorrecte
    Bonjour à tous,

    J'ai un petit problème que j'ai contourné jusqu'alors mais que j'aimerai bien résoudre.

    J'ai une valeur dans une base de données MySql déclarée en FLOAT = 3.3

    Lorsque je récupère cette valeur dans une requête mon Recset1.Fields("Surface").Value = 3.3

    lorsque j'affecte cette valeur à une variable Surface_dbl qui est initialisée à 0

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Surface_dbl = Recset1.Fields("Surface").Value
    J'obtiens la valeur 3.2999999523162842

    et c'est la même chose avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Surface_dbl =Cdbl(Recset1.Fields("Surface").Value)
    L'écart est infime mais au grès des opération faites sur différentes valeurs je peux finir avec un écart notable.

    Quelqu'un à une idée de ce qui se passe.

  2. #2
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    Salut,

    le souci vient de ton passage de float vers double (tu t'en doutais je suppose).
    Vu que tu ne sembles pas travailler sur des précisions de fou tu pourrais travailler qu'avec des float.
    Tu pourrais également déclaré ton champ en DB en DOUBLE ou en NUMBER(n, p) selon ce que propose MySQL.
    Truc bien plus cradingue, tu peux double-caster ta valeur en passant par ... une string :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	float f = 3.3f;
    	double d = f;
    	double d2 = Convert.ToDouble(f.ToString());
    	MBX(f.ToString() + " - " + d.ToString() + " - " + d2.ToString());
    	// sortie (locale fr) : 3,3 - 3,2999999523162842 - 3,3
    Bon dev.
    Plus je connais de langages, plus j'aime le C.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    351
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 351
    Points : 333
    Points
    333
    Par défaut
    Merci jopopmk,

    Effectivement je m'y attendais un peu même si j'espérais un truc génial pour régler ça.

    Quand je disais que j'ai contourné le pb c'est effectivement que je suis passé par une string.

    Je travaille en Visual Basic et il me semble que je ne peux pas déclarer une variable en Float
    Si je modifie la base de donnée, le champ Flaot et DOUBLE, il me fait la même conversion et toutes mes valeur sont modifiées.
    ça semble mieux en décimal, je ferai le changement au fur et a mesure de mes interventions dans les tables.

  4. #4
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    Je veux pas dire de bêtise (même si j'aime bien le faire en général ) mais je crois que le float se nomme Single en VB.

    Pour le type coté DB je te laisse regarder cette page. Il semblerait qu'on puisse donner une précision au FLOAT pour en faire soit un 4o (float) soit un 8o (double).

    Bon dev.
    Plus je connais de langages, plus j'aime le C.

Discussions similaires

  1. Réponses: 0
    Dernier message: 24/11/2008, 13h02
  2. Une valeur Double dans JSF
    Par jeedev dans le forum JSF
    Réponses: 1
    Dernier message: 10/10/2008, 18h56
  3. Conversion d'une valeur numérique
    Par aldama dans le forum Débuter
    Réponses: 3
    Dernier message: 19/02/2008, 20h37
  4. Verifier le type d'une string contient une valeur double
    Par tangueros dans le forum VBA Access
    Réponses: 2
    Dernier message: 19/06/2007, 12h56

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