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

Windows Forms Discussion :

Math, division et C#


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Janvier 2010
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 31
    Par défaut Math, division et C#
    Bonjour j'ai un soucis sur une formule mathématique qui basiquement ressemble à ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    int var1 = 5;
    int var2 = 1;
    int var3 = 91;
    double Total = (100 * var3) / (66 * (var1 - var2 + 1));
    je souhaite obtenir le résultat à 2 décimales, dans ce cas présent : 27.57 ou tout du moins arrondis correctement ( 28 ici ) mais c# me sort des chiffres astronomiques si je me sert du double ou float; et si je passe tout en int il n'arrondit pas et me marquerais juste 27 dans l'exemple.

    Y a t il un solution pour diviser des chiffres avec des décimaux et obtenir le résultat correct ??

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2003
    Messages
    311
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 311
    Par défaut
    Le fait que tu aies une grosse précision n'est pas un souci, il suffit de reformater le nombre avec string.format pour éliminer les décimales en trop

  3. #3
    Membre Expert
    Avatar de Samuel Blanchard
    Homme Profil pro
    Expert .NET
    Inscrit en
    Février 2010
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Expert .NET

    Informations forums :
    Inscription : Février 2010
    Messages : 1 504
    Par défaut
    un arrondi à 2 décimales peut être ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    total = Math.Round( total, 2 );

  4. #4
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    voire travailler avec decimal plutot que float ou double
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    et si je passe tout en int il n'arrondit pas et me marquerais juste 27 dans l'exemple.
    Avec Total=27.57, si tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int i1 = (int)Total ;
    int i2 = Convert.ToInt32(Total) ;
    tu auras i1=27 et i2=28 (Faut le savoir..., quand je m'en suis aperçu, j'ai du reprendre tous mes cast )

  6. #6
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    165
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 165
    Par défaut
    Tu es en train d'effectuer une division entière puisque toutes les variables qui interviennent dans l'opération sont des entiers et à la fin tu affectes le résultat entier de l'opération à un double.
    Utilises plutôt le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    int var1 = 5;
    int var2 = 1;
    int var3 = 91;
    double Total = (100. * var3) / (66 * (var1 - var2 + 1));
    ou bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    int var1 = 5;
    int var2 = 1;
    int var3 = 91;
    double Total = (100 * var3) / (66. * (var1 - var2 + 1));
    ou en fin
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    int var1 = 5;
    int var2 = 1;
    int var3 = 91;
    double Total = (100. * var3) / (66. * (var1 - var2 + 1));

  7. #7
    Membre averti
    Inscrit en
    Janvier 2010
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 31
    Par défaut
    Bonjour et merci pour les réponse je teste et étudie les diverses solutions pour la dernière, il me met des erreurs d'identifiers si j utilise les ".", un truc qui m'échappe?

    merci =)

    edit : resou via "Decimal" et Mathround

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Decimal var1 = Math.Round((100 * var2) / var3, 2);

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

Discussions similaires

  1. [Math] Modulo de la division par 97
    Par cafeine dans le forum Contribuez
    Réponses: 1
    Dernier message: 20/08/2007, 20h48
  2. [Math][Info]division par zéro
    Par niko8181 dans le forum Général Java
    Réponses: 9
    Dernier message: 23/05/2005, 10h58
  3. probleme avec une division par zéro
    Par jcharleszoxi dans le forum Langage SQL
    Réponses: 2
    Dernier message: 26/03/2003, 19h14
  4. Problème de math....
    Par zdra dans le forum Mathématiques
    Réponses: 6
    Dernier message: 11/11/2002, 11h59
  5. Maths : équations
    Par Anonymous dans le forum Mathématiques
    Réponses: 5
    Dernier message: 02/05/2002, 17h41

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