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

  1. #1
    Membre à l'essai
    Inscrit en
    Janvier 2010
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 31
    Points : 20
    Points
    20
    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 averti
    Profil pro
    Inscrit en
    Février 2003
    Messages
    311
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 311
    Points : 337
    Points
    337
    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 émérite
    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 : 50
    Localisation : France

    Informations professionnelles :
    Activité : Expert .NET

    Informations forums :
    Inscription : Février 2010
    Messages : 1 504
    Points : 2 682
    Points
    2 682
    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 );
    .
    Pas de question technique en MP, merci.
    .
    Un emulator Gameboy Color pour Windows Phone ?
    c'est moi qui l'ai fait

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    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 éminent 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
    Points : 7 903
    Points
    7 903
    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 )
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  6. #6
    Membre régulier
    Inscrit en
    Janvier 2006
    Messages
    165
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 165
    Points : 106
    Points
    106
    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 à l'essai
    Inscrit en
    Janvier 2010
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 31
    Points : 20
    Points
    20
    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);

  8. #8
    Membre régulier
    Inscrit en
    Janvier 2006
    Messages
    165
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 165
    Points : 106
    Points
    106
    Par défaut
    excuses moisj'ai oublié le 0

    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.0 * var3) / (66.0 * (var1 - var2 + 1));

  9. #9
    Expert éminent 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
    Points : 7 903
    Points
    7 903
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Total = (100f * var3) / (66f * (var1 - var2 + 1));
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

+ 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, 19h48
  2. [Math][Info]division par zéro
    Par niko8181 dans le forum Général Java
    Réponses: 9
    Dernier message: 23/05/2005, 09h58
  3. probleme avec une division par zéro
    Par jcharleszoxi dans le forum Langage SQL
    Réponses: 2
    Dernier message: 26/03/2003, 18h14
  4. Problème de math....
    Par zdra dans le forum Mathématiques
    Réponses: 6
    Dernier message: 11/11/2002, 10h59
  5. Maths : équations
    Par Anonymous dans le forum Mathématiques
    Réponses: 5
    Dernier message: 02/05/2002, 16h41

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