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

Framework .NET Discussion :

Fonctionnement de Math.Round


Sujet :

Framework .NET

  1. #1
    Membre émérite
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Points : 2 265
    Points
    2 265
    Par défaut Fonctionnement de Math.Round
    Bonjour,

    Afin d'éviter d'encombrer mon IU avec de trop grand chiffre, j'utilise Math.Round afin d'arrondir mes valeurs.

    Mais il possède un comportement bizarre :

    A la base, j'ai 9.8328685760498047.

    J'utilise Math.Round de la façon suivante :

    Math.Round(monDouble, 2, MidpointRounding.AwayFromZero)

    Et au résultat, j'ai 9.8300000000000001 alors que j'aurais dû avoir 9.83.

    Quelqu'un sait-il pourquoi ?
    Blog - Articles - Framework

    MSDN vous aide, si si, alors n'hésitez pas à y faire un tour avant de poser une question.
    Ah, et n'oubliez pas, Google peut répondre à la majorité de vos questions.

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 21
    Points : 24
    Points
    24
    Par défaut
    Hello,

    étrange, moi j'ai juste écrit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Double monDouble = 9.8328685760498047;
    Console.WriteLine(Math.Round(monDouble, 2, idpointRounding.AwayFromZero));
    et j'ai bien comme résultat 9,83.

  3. #3
    Membre émérite
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Points : 2 265
    Points
    2 265
    Par défaut
    C'est à cause du Console.Writeline, qui formate ton résultat.

    Si tu mets un point d'arrêt de que tu regarde ton résultat, tu devrais avoir le même résultat que moi.
    Blog - Articles - Framework

    MSDN vous aide, si si, alors n'hésitez pas à y faire un tour avant de poser une question.
    Ah, et n'oubliez pas, Google peut répondre à la majorité de vos questions.

  4. #4
    Membre confirmé Avatar de Redouane
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    435
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 435
    Points : 569
    Points
    569
    Par défaut
    Bonjour,

    C'est à cause du Double, même si tu lui donne 9.83 comme valeur, il va la convertir en 9.8300000000000001 parce que le double a un niveau de précision particulier.
    Et si tu essaye de le convertir en décimal avant d'appeler Round, est ce valable pour toi ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Double monDouble = 9.8328685760498047;
    Decimal d = Math.Round(Convert.ToDecimal(monDouble), 2, MidpointRounding.AwayFromZero);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Redouane me = new Redouane();
    if (me.Connect())
        me.ShareInformations();

  5. #5
    Membre émérite
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Points : 2 265
    Points
    2 265
    Par défaut
    Je me suis débrouillé en formatant le String pour l'affichage, mais je pense que la conversion en decimal doit marcher.
    Blog - Articles - Framework

    MSDN vous aide, si si, alors n'hésitez pas à y faire un tour avant de poser une question.
    Ah, et n'oubliez pas, Google peut répondre à la majorité de vos questions.

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

Discussions similaires

  1. Petit soucis avec Math.round()
    Par Adenora dans le forum Débuter avec Java
    Réponses: 5
    Dernier message: 02/11/2008, 21h13
  2. arrondi math.round
    Par calitom dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 24/09/2007, 14h53
  3. System.math.round problème d'arrondi..
    Par Destiny dans le forum C#
    Réponses: 8
    Dernier message: 09/09/2007, 10h54
  4. arrondir un chiffre sans utiliser math.round
    Par calitom dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 27/06/2007, 17h57
  5. Comportement étrange de Math.round
    Par opasteur dans le forum Langage
    Réponses: 4
    Dernier message: 15/09/2006, 13h05

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