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

Java Discussion :

Probleme de comprehension des cast!


Sujet :

Java

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 48
    Points : 25
    Points
    25
    Par défaut Probleme de comprehension des cast!
    Bonsoir tout le monde,

    Je suis debutant en java et je bute deja , mon probleme c'est les cast, j'ai compris que un float n'a que 4bits donc il affiche avec une moindre precision un float par rapport au double mais, je vais vous passer un petit bout de code et si vous pouviez m'eclairer?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int nbre1 = 3, nbre2 = 2;
    double resultat = nbre1 / nbre2;
    System.out.println("Le résultat est = " + resultat);
    le resultat =1
    pk pas 1,5??

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 559
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 559
    Points : 21 621
    Points
    21 621
    Par défaut
    Citation Envoyé par ville_de_lumiere Voir le message
    , j'ai compris que un float n'a que 4bits donc il affiche avec une moindre precision un float par rapport au double [...]
    4 octets en fait. Mais oui c'est bien ça, vu qu'un double en a 8.

    Citation Envoyé par ville_de_lumiere Voir le message
    mon probleme c'est les cast
    Il n'y a pourtant aucun cast dans ton code.
    Un cast c'est quand on fait quelque chose du genre (bidule)truc .
    Par exemple là-dedans :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    long a = 12;
    int b = (int)a;
    Là il y a un cast de long vers int.

    Citation Envoyé par ville_de_lumiere Voir le message
    le resultat =1
    pk pas 1,5??
    Parce que nbr1 et nbr2 sont des int. Donc si on demande de les diviser, ça fait une division entière, dont le quotient est 1. Une fois que tu assignes ce 1 à une variable de type double, ça fait 1,0.
    Pour obtenir une division à virgules, il faut qu'au moins un des deux opérandes soit de type à virgule, donc float ou double.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 48
    Points : 25
    Points
    25
    Par défaut
    Bonsoir Thelvin,

    merçi pour ta réponse, d'une part j'ai bien saisie que la division de 2 int renvoyait un int(1) et qui equivaut a 1,0 donc 1.

    Par contre, je ne vois pas trop la difference entre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    long a = 12;
    int b = (int)a;
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int nbre1 = 3, nbre2 = 2;
    double resultat = nbre1 / nbre2;
    System.out.println("Le résultat est = " + resultat);
    quelle est la difference fondamentale si j'aurais mis "double" devant nbre1 et nbre2??

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 559
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 559
    Points : 21 621
    Points
    21 621
    Par défaut
    Ben, pas mal de différences :
    - Pas de parenthèse
    - Je suis désolé mais non, tu n'as pas mis double ni devant nbre1 ni devant nbre2, tu l'as mis devant resultat.

    Dans les deux cas, quelle différence, ben la différence c'est que comme on écrit pas du tout la même chose, ça veut pas du tout dire la même chose.
    double resultat déclare une nouvelle variable, de type double. C'est une déclaration de variable.
    (double) resultat évalue la valeur de la variable resultat, et convertit cette valeur en type double. C'est un opérateur unaire.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 48
    Points : 25
    Points
    25
    Par défaut
    merçi, ça devient plus clair d'un coup, mais est ce que l'on peut dire que les types double et long sont les types qui peuvent contenir autant de caracteres(chiffres ou nn) dans une variable et si oui comment les departager??
    Vu bien sur qu'ils ont le meme nombre d'octets?

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 559
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 559
    Points : 21 621
    Points
    21 621
    Par défaut
    Citation Envoyé par ville_de_lumiere Voir le message
    mais est ce que l'on peut dire que les types double et long sont les types qui peuvent contenir autant de caracteres(chiffres ou nn) dans une variable
    Non, ils ne contiennent que des nombres, il n'y a pas de notion de caractère ni de chiffre.
    Ce sont des types qui utilisent le même nombre de bits (8 octets => 64 bits) et donc qui sont chacun capables de contenir le même nombre de valeurs différentes... Mais ces valeurs ne sont pas les mêmes.

    (Et d'ailleurs ce n'est pas tout à fait vrai. Il y a quelques valeurs redondantes, disons "inutilisées" dans le type double, ce qui faut que le type long en a un peu plus.)

    Citation Envoyé par ville_de_lumiere Voir le message
    et si oui comment les departager??
    long ne contient que des nombres entiers, contigus (tous les entiers de -2 puissance 63 à 2 puissance 63-1), et les calculs de long sont toujours exacts.
    double peut contenir des nombres à virgules, mais pas tous les nombres entre deux nombres à virgules (normal puisqu'ils sont infinis,) et les calculs sont presque toujours approchés et pas exacts (par exemple le nombre 0,1 n'existe pas, il est approximé à une valeur proche).
    Pour simplifier un double ne contient que les chiffres les plus significatifs, et indique où il faut mettre la virgule : loin devant (0,0000000000...deschiffres), loin derrière (deschiffres...000000000000,0) ou au milieu (deschiffres,desautreschiffres)

Discussions similaires

  1. Probleme de comprehension des threads en c++
    Par Benyou dans le forum Threads & Processus
    Réponses: 1
    Dernier message: 22/03/2013, 15h31
  2. probleme de comprehension des listes
    Par marsafari dans le forum Général Python
    Réponses: 2
    Dernier message: 29/07/2009, 15h37
  3. Réponses: 5
    Dernier message: 30/11/2007, 17h13
  4. Probleme de comprehension des masques
    Par dduke dans le forum Développement
    Réponses: 3
    Dernier message: 08/01/2007, 18h38
  5. Réponses: 3
    Dernier message: 04/09/2002, 09h42

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