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 :

[VB.Net/Double] Pourquoi le resultat d'un calcul est incorrect ?


Sujet :

VB.NET

  1. #1
    Membre régulier
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2004
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2004
    Messages : 145
    Points : 95
    Points
    95
    Par défaut [VB.Net/Double] Pourquoi le resultat d'un calcul est incorrect ?
    Salut,
    je fais des calcul assez poussé dans mon appli, mais je me suis aperçu que ça donnait pas des valeurs correcte voici un exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim a As Double = 120.6
    Dim b As Double = 120
    Dim c As Double
    MsgBox(c)
    Ce bout de code m'affiche 0.599999999999994
    J'aurais besoin que ça donne 0.6
    Une solution...?
    Merci d'avance

  2. #2
    Invité
    Invité(e)
    Par défaut
    Deja dans ton exemple la variable "c" n'est pas initialisé.

    Tu peux utiliser la methode Maths.Round qui permet de faire un arrondi.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 9
    Points : 11
    Points
    11
    Par défaut
    Je suppose que c = a - b vu le résultat attendu.

    Maintenant, ton probléme est normal. Le codage de nombre réels en informatique n'est pas une science exacte et tu aura toujours des valeurs approchantes.

    http://msdn2.microsoft.com/fr-fr/lib...em.double.aspx

  4. #4
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Ceci te donnera le resultat attendu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    
    Dim a As Decimal = 120.6D
    Dim b As Decimal = 120D
    Dim c As Decimal = a - b
    Console.WriteLine(c)
    Console.ReadLine()
    

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 103
    Points : 1 561
    Points
    1 561
    Par défaut
    comme l'a si bien dit feilong, n'oublie pas qu'en informatique tu travail en numérique certes mais en mathématique discretes. Par essence, c'est l'opposé des maths réelles que tu connais habituellement qui sont des maths discretes !

    En informatique tout repose sur la modélisation des données. Pour un nombre entier par exemple, il existe plétor de modélisation différentes. Chacune à ses caractèristique exemple byte gere les nombre entier allant de 0 a 255 mais pas au dela ou négatifs (là il faut utiliser alors l'arithmétique signée)

    Le probleme c'est qu'en math tu travail dans un univers dit infini, c'est le fondement des maths tel que tu les connais. Malheureusement en informatique, tu travail dans un univers FINI, et oui la notion d'infini n'existe pas en informatique, meme si tu code dans ta représentation une option INFINIE, ca ne règlera pas le probleme car ta modélisation aura TOUJOURS une limite ! supposons pour cela que tu travail alos avec l'expression INFINI-1, en math ca existe, en informatique là tu sera bien ... beeeeep ... si tu vois ce que je veux dire.
    pour les nombres réels, on utilise donc les types float et double pour la représentation. Il s'agit du dégré de précision du modele. Les doubles ont comme leur nom l'indique une double précision par rapport au modele d'origine. Cependant comme je l'ai déja indiqué, il sont finis et par conséquent limités et donc, approximatifs, les résultats obtenus ne sont donc pas FORMELS mais APPROXIMATIFS. C'est pourquoi en math certaines expressions donnent le meme résultat mais pas lorsque tu effectue le calcul sur un ordinateur.
    Tâche donc de toujours garder à l'esprit ces notions quand tu travaille avec des données numériques dans un programme, surtout quand les données numérique sont réelles.

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

Discussions similaires

  1. [ADO.Net][C#] Pourquoi OracleConnection lève une exception ?
    Par meuledor dans le forum Accès aux données
    Réponses: 2
    Dernier message: 26/01/2006, 17h54
  2. [vb.net] double click dans une datagrid
    Par bguihal dans le forum VB.NET
    Réponses: 6
    Dernier message: 15/12/2005, 17h18
  3. [vb.net] [textbox] pourquoi validating est appellée
    Par graphicsxp dans le forum Windows Forms
    Réponses: 4
    Dernier message: 02/11/2005, 11h09
  4. Réponses: 2
    Dernier message: 26/10/2005, 11h44
  5. [VB.NET]Double redirection.
    Par CammCamm dans le forum ASP.NET
    Réponses: 9
    Dernier message: 24/11/2003, 15h11

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