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 :

Comment récupérer la partie entière d'un double


Sujet :

C#

  1. #1
    Membre du Club Avatar de ralf91
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 419
    Points : 60
    Points
    60
    Par défaut Comment récupérer la partie entière d'un double
    salut !

    j'aimerais récupérer la partie entière d'un double :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    int x;
    double y=-3.3325988;
    //j'aimerais mettre la partie entière de y dans x c'est a dire x=-3
    comment faire ?

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    x = (int)Math.Truncate(y);

  3. #3
    Membre du Club Avatar de ralf91
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 419
    Points : 60
    Points
    60
    Par défaut
    salut !
    je l'ai essayé mais pour des valeurs négatives, elle retourne 0
    et pour y=8 elle retourne 7 ????? c'est bizarre non !

  4. #4
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Problème de casting je pense, essaye :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    double d=Math.Truncate(y);
    int I=(int)d;
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  5. #5
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    En fait on peut carrément faire ça :
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    double y = -3.3325988;
                int x = (int)y;

  6. #6
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Je pense que tu a raison mais tu est certain qu'il n'y a pas parfois des problèmes d'arrondi

    Style 3.99999 = 4 ?
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  7. #7
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    Bah en même temps 3.9999... c'est bien égal à 4
    Sinon les erreurs d'arrondi calamiteux j'en ai surtout vu avec les float, pas les double, mais vu qu'il y a toujours des histoires de conversions à par utiliser lavaleur.ToString et splitter sur le séparateur je ne sais pas s'il y a une méthode arondi proof ...

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par ralf91 Voir le message
    je l'ai essayé mais pour des valeurs négatives, elle retourne 0
    Ah ?? Si c'est une valeur entre -1 et 0, c'est logique, mais sinon ça renvoie bien la partie entière... j'ai fait le test, Math.Truncate(-2.5) renvoie bien -2

    Citation Envoyé par ralf91 Voir le message
    et pour y=8 elle retourne 7 ????? c'est bizarre non !
    Ca pourrait s'expliquer par un problème de précision : un double ne permet pas toujours d'encoder la valeur exacte d'un nombre, donc 8 pourrait être encodé en un truc du genre 7.999996879...
    Cela dit j'ai fait le test et chez moi ça renvoie bien 8

    Citation Envoyé par olibara Voir le message
    Problème de casting je pense, essaye :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    double d=Math.Truncate(y);
    int I=(int)d;
    Euh... c'est pareil

    Citation Envoyé par smyley Voir le message
    Bah en même temps 3.9999... c'est bien égal à 4
    Ben c'est nouveau ça
    Si tu fais des calculs de trajectoire pour une fusée (par exemple), tu ne peux pas te permettre de considérer que c'est égal

  9. #9
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Euh... c'est pareil

    A priori oui et il semble bien que oui dans ce cas ci

    Mais j'ai déja souvent eu des problemes de casting de ce genre dans des expressions un peu complexe que j'ai été obligé de contourner par l'usage d'une variable temporaire
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  10. #10
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Ben c'est nouveau ça
    Si tu fais des calculs de trajectoire pour une fusée (par exemple), tu ne peux pas te permettre de considérer que c'est égal
    Tu as déjà entendu parler des séries entières ? Tu peux écrire 1 sous la forme d'une série entière (somme de 0 à l'infini) et ça va te donner 0,9 + 0,09 + ... = 0,999... = 1
    D'ailleurs il y a plein de manières de l'écrire cf. http://en.wikipedia.org/wiki/0.999...
    Donc oui, 3.99 != 4 mais 3.999... = 4

  11. #11
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par smyley Voir le message
    Tu as déjà entendu parler des séries entières ? Tu peux écrire 1 sous la forme d'une série entière (somme de 0 à l'infini) et ça va te donner 0,9 + 0,09 + ... = 0,999... = 1
    D'ailleurs il y a plein de manières de l'écrire cf. http://en.wikipedia.org/wiki/0.999...
    Donc oui, 3.99 != 4 mais 3.999... = 4
    dans ce cas d'accord... j'avais interprété les points de suspension comme de la ponctuation, pas comme faisant partie du nombre

  12. #12
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    Citation Envoyé par tomlev Voir le message
    dans ce cas d'accord... j'avais interprété les points de suspension comme de la ponctuation, pas comme faisant partie du nombre
    Remarque je me souviens avec émotion d'un cours de physique ou, en train de lutter pour ne pas m'assoupir, j'entends le prof dire "et on obtient 3500, donc c'est égal à 0"

  13. #13
    Membre éprouvé Avatar de sisqo60
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2006
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 754
    Points : 1 188
    Points
    1 188
    Par défaut
    Tout à fait d'accord avec vous les gars, mais si je peux me permettre,
    les fonctions suivantes sont là pour ça, non?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Math.Ceiling
    Math.Floor



    si le nombre est supérieur à zéro tu prends Math.Floor sinon Math.Ceiling.
    Un âne se croit savant parce qu'on le charge de livres (proverbe américain)

    N'oubliez pas de avant de
    Pas de question techniques par MP, c'est contre la philosophie du forum

  14. #14
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par sisqo60 Voir le message
    si le nombre est supérieur à zéro tu prends Math.Floor sinon Math.Ceiling.
    Ben c'est plus simple de faire Math.Truncate, qui marche dans tous les cas...

Discussions similaires

  1. Réponses: 3
    Dernier message: 05/02/2008, 20h08
  2. Récupérer la partie entière d'un montant
    Par Petit scarabé dans le forum Cobol
    Réponses: 11
    Dernier message: 11/12/2007, 22h49
  3. Comment récupérer une partie d'image?
    Par fredonouille dans le forum C#
    Réponses: 5
    Dernier message: 28/09/2007, 12h06
  4. Comment récupérer la partie décimale d'un double
    Par jarjardos dans le forum Langage
    Réponses: 9
    Dernier message: 26/07/2006, 15h41
  5. comment récupérer une partie d'une chaine
    Par yannickrohel dans le forum C
    Réponses: 7
    Dernier message: 27/02/2006, 10h31

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