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

C# Discussion :

A quoi sert le type .ToString("F")?


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 230
    Par défaut A quoi sert le type .ToString("F")?
    Bonjour,
    J'ai du mal à comprendre pourquoi quand je faisait la soustraction de deux nombre et quand cette valeur(de la soustraction des 2 nombres) est inférieur à 10 au lieu d'avoir par exemple 9.5 j'aurais 9.4999999 mais en faisant .ToString("F") de cette valeur j'aurais 9.5 est ce quelqu'un à une réponse

    Merci.

  2. #2
    Membre émérite

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2011
    Messages
    487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2011
    Messages : 487
    Par défaut
    Bonjour,

    Les modèles de format sont expliqués ici.
    Mon blog sur les technos .NET et Agile -> http://blog.developpez.com/maximepalmisano/

  3. #3
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 230
    Par défaut
    Peut être j’aurais du poser la question autrement, Pourquoi la valeur retournée de la soustraction de 2 nombres( de type double) si la différence est < à 10 ne donne pas la valeur exacte de la soustraction mais plutôt comme je viens de le montrer avant pour 9.5 j'ai eu 9.4999999

  4. #4
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    Car le double se stocke sous forme de puissance de deux. Par conséquent, lors de calculs en base 10 il peut y avoir des erreurs de précision.
    Si tu veux des calculs plus précis pour des décimaux tu peux utiliser le type decimal.

  5. #5
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 230
    Par défaut
    J'ai une question si je laisse le type de variable le même(c'est à dire double) et je parse( en .ToString("F")) la valeur eu(en faisant la soustraction) est ce que ce qu'il y a une différence entre cette méthode et définir la variable en décimal

  6. #6
    Membre émérite Avatar de kheironn
    Homme Profil pro
    Chef de projets technique C# / MVC / .Net
    Inscrit en
    Février 2007
    Messages
    823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets technique C# / MVC / .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2007
    Messages : 823
    Par défaut
    Citation Envoyé par Nathanael Marchand Voir le message
    Car le double se stocke sous forme de puissance de deux. Par conséquent, lors de calculs en base 10 il peut y avoir des erreurs de précision.
    Si tu veux des calculs plus précis pour des décimaux tu peux utiliser le type decimal.
    Ajoutons que c'est aussi le cas du single(Float)...
    Il s'agit des types à virgule flotante.
    On ne fait pas de calcul avec ces types, si on veut être précis

  7. #7
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 230
    Par défaut
    Une autre question je voudrais savoir c'est quoi la différence entre un decimal et parser le résultat de la somme ou la soustraction de 2 nombres un double en .ToString("F")

    PS: Car pour moi j'ai une application dont tout le calcul est fait avec des doubles puis on leur fait du parsing en .ToString("F") et ca fonctionne bien

  8. #8
    Membre émérite Avatar de kheironn
    Homme Profil pro
    Chef de projets technique C# / MVC / .Net
    Inscrit en
    Février 2007
    Messages
    823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets technique C# / MVC / .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2007
    Messages : 823
    Par défaut
    Comme on te l'a dit plus haut, les types à virgule flottante sont des approximations...
    Les calculs sur des approximations ugmentent les erreurs. Ainis tu fais des calculs du genre 16-10 et tu obtiens 5.999999999999999 (je ne sais pas si ce cas précis est exact, mais c'est l'idée générale qui importe).

    Ton décimal est une valeur EXACTE, pas ton double/float. Un float, ça va bien pour stoker sans calcul et sans besoin de précision, mais dès qu'on fait du calcul (surtout en monétaire), il faut passer en valeur exacte (genre décimal) afin de ne pas cumuler les erreurs d'aproximations.

    Pour faire simple et pour que tu comprennes : en float, toutes les valeurs des nombres réels (dans la limite des capacités) ne sont pas représentées. comme Nathanael Marchand te l'a dit, c'est un calcul à partir de puissances de 2.

    Pour plus de détail voir ici

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

Discussions similaires

  1. À quoi sert le type long long ?
    Par Invité dans le forum Langage
    Réponses: 19
    Dernier message: 24/11/2014, 09h20
  2. a quoi sert les accolades dans Class[] types = {Integer.TYPE};
    Par harf18 dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 15/04/2010, 10h08
  3. A quoi sert toString
    Par xx.inconnuu dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 26/03/2009, 11h15

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