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

Développement Web avec .NET Discussion :

Problème de conversion en double : Trop de chiffres après la virgule


Sujet :

Développement Web avec .NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    228
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 228
    Par défaut Problème de conversion en double : Trop de chiffres après la virgule
    Bonjour,

    Petit soucis :

    J'ai un label affichant un prix (9,99).
    Dans mon code behind, je le convertis en Double pour l'insérer en base (champ type double).

    Je fais donc un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    double prixttc = Convert.ToDouble(label.Text);
    La conversion se fait bien mais j'obtiens 9.9900000000000002 ... Du coup ça ne rentre pas en base.

    Quelqu'un aurait une idée ?

    Merci d'avance.

  2. #2
    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 Scots Voir le message
    J'ai un label affichant un prix (9,99).
    Dans mon code behind, je le convertis en Double pour l'insérer en base (champ type double).
    Déjà tu es mal parti... un label sert à afficher une valeur, et uniquement à ça. En aucun cas ça ne doit être le "stockage de référence" de la valeur. Tu devrais avoir la valeur d'origine quelque part dans une variable, une propriété d'un objet, une DataTable ou quelque chose comme ça, pas la relire à partir de l'interface graphique (sauf bien sûr dans le cas où c'est une valeur saisie par l'utilisateur)

    D'autre part, le type Double n'est pas adapté pour les valeurs financières. Il faut utiliser le type Decimal, qui est fait pour ça.

    Citation Envoyé par Scots Voir le message
    Je fais donc un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    double prixttc = Convert.ToDouble(label.Text);
    La conversion se fait bien mais j'obtiens 9.9900000000000002 ... Du coup ça ne rentre pas en base.
    Le type Double ne peut pas stocker des valeurs décimales exactes, parce qu'il représente un nombre en virgule flottante binaire ; à part quelques valeurs qui tombent juste, la valeur qui est effectivement stockée dans la variable est une approximation. En l'occurrence 9.99 n'a pas de représentation exacte en virgule flottante binaire.

    Le type Decimal, en revanche, représente un nombre en virgule flottante décimale, et permet donc de stocker des valeurs décimales exactes. C'est pour ça qu'il faut toujours utiliser ce type pour des valeurs financières.

    De plus, quand tu dis "ça ne rentre pas en base", que veux-tu dire exactement ? Quel est le type de la colonne dans la DB ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    228
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 228
    Par défaut
    Merci Tomlev,

    J'avais déjà essayé avec DECIMAL mais j'avais oublié le (10,2) et laissé le (10,0) par défaut ...

    Du coup, ok. Et je vois mon erreur : Lorsque je fais ma conversion de String en Decimal, il met une virgule au lieu d'un point. Du coup j'ai une erreur sur le Insert.

  4. #4
    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 Scots Voir le message
    Du coup, ok. Et je vois mon erreur : Lorsque je fais ma conversion de String en Decimal, il met une virgule au lieu d'un point. Du coup j'ai une erreur sur le Insert.
    Un Decimal, en soit, ne contient pas de virgule ou de point dans un decimal ; c'est seulement dans sa représentation sous forme de chaine que ça apparaît.

    Je pense que tu construis ta requête SQL en concaténant la valeur dans la chaine ; il ne faut absolument pas faire ça, c'est une source de bugs et de failles de sécurité (injection SQL). Il faut utiliser une requête paramétrée : http://johannblais.developpez.com/tu...s-donnees/#LIV

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    228
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 228
    Par défaut
    Pas du tout, je ne fais aucune concaténation de chaine.

    Je lis une valeur en base Table1, je l'affiche dans un Label, je clique sur un bouton, je l'insère en base Table2.

    Je lis un décimal, je l'affiche en string et je veux le réinsérer en décimal ...

  6. #6
    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 Scots Voir le message
    Je lis une valeur en base Table1, je l'affiche dans un Label, je clique sur un bouton, je l'insère en base Table2.
    Fais voir le code que tu utilises pour l'insertion

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

Discussions similaires

  1. Afficher un double avec 2 chiffres après la virgule
    Par luilui dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 08/12/2010, 18h19
  2. Trop de chiffres après la virgule
    Par Chicard dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 26/02/2009, 14h51
  3. Double avec deux chiffres après la virgule
    Par Viscapon dans le forum Débuter avec Java
    Réponses: 32
    Dernier message: 14/02/2009, 17h50
  4. Double : forcer 2 chiffres après la virgule
    Par womannosky dans le forum Langage
    Réponses: 2
    Dernier message: 15/01/2009, 16h18
  5. Réponses: 1
    Dernier message: 21/04/2008, 16h00

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