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

Langage Java Discussion :

conversion double/int sans perte d'informations


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 3
    Par défaut conversion double/int sans perte d'informations
    Bonjour,

    Je fais actuellement un calcul du type 2^(une valeur entière)
    par exemple 2^31
    selon les lois des mathématiques cela donne = 2147483648 ;-)

    or je dois convertir cette donnée (qui est un double => retour de la méthode Math.pow) en entier pour une question d'affichage et là ma donnée devient 2147483647 !!

    je connais le problème de perte d'information au passage de double à entier mais je ne peux pas garder le double car celui-ci s'affiche : 2.147483648E9
    or à l'affichage j'ai 2 contraintes :
    - il ne faut pas de valeurs avec .0
    - pas de E
    je veux réellement la valeur entière

    mais comment faire pour avoir la bonne valeur ?

    Merci

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 5
    Par défaut
    Salut,

    Alors pour ton problème avec 2^31, c'est plus une question de taille limite : les int ne peuvent pas dépasser 2147483647 en java. Pour t'en convaincre, essaie le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    int test = 2147483647;
    test++;
    System.out.println(test);
    Pour pouvoir écrire sans la mise en forme classique, tu peux utiliser les formats. Dans l'exemple ci-dessous, pour avoir 10 chiffres au max avant la virgule et 0 après.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    double test = Math.pow(2, 31);
    String format = "%10.0f\n";
    System.out.format(format, test);

  3. #3
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    ou tu fais simplement el travail avec un Long


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    /*marche jusque n=62*/
    public long deuxExpN(int n){
        return 1 << n;
    }

  4. #4
    Membre éprouvé
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Décembre 2005
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Décembre 2005
    Messages : 109
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    ou tu fais simplement el travail avec un Long

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    /*marche jusque n=62*/
    public long deuxExpN(int n){
        return 1 << n;
    }
    Ça fonctionne mieux en ayant un long dans l'opération, sinon ça cast juste avant d'envoyer le résultat, déjà trop tard.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    /*marche jusque n=62*/
    public long deuxExpN(int n){
        return 1L << n;
    }

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 3
    Par défaut
    Je n'imaginais être tombée pile sur la limite.
    La solution du format marche mais elle me retourne un String.
    Or j'ai besoin de traiter la valeur numérique également (après l'affichage).
    J'ai donc choisi la solution du Long qui couvre mes besoins.

    Merci à tous.

  6. #6
    Membre Expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Par défaut
    ... et si un jour tu dépassais un long, tu pourrais toujours utiliser BigInteger


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

Discussions similaires

  1. [Normalisation] Prouver que la décomposition est sans perte d'information (SPI)
    Par m.david dans le forum Schéma
    Réponses: 5
    Dernier message: 02/01/2011, 23h49
  2. conversion flv mp3 sans perte de qualité
    Par barbug dans le forum Applications et environnements graphiques
    Réponses: 2
    Dernier message: 14/08/2010, 13h02
  3. Réparation de système sans perte d'informations
    Par hassiba_45 dans le forum Windows XP
    Réponses: 7
    Dernier message: 28/01/2009, 19h16
  4. Conversion double -> int, problème étrange
    Par mickael9 dans le forum C++
    Réponses: 10
    Dernier message: 20/10/2008, 03h48
  5. Réponses: 3
    Dernier message: 06/06/2008, 14h35

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