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 :

convertir/arrondir double en int


Sujet :

Langage Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    429
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 429
    Points : 475
    Points
    475
    Par défaut convertir/arrondir double en int
    Bonjour,

    Mon problème est le suivant :
    Comment convertir/arrondir proprement et efficacement un double en int ?

    Je fais des calculs mathématiques sur des double.
    Je dois ensuite utiliser les résultats pour des affichages graphiques sous Swing 2D (g2.draw())
    Je dois donc préalablement convertir mes double en int.
    J'ai essayé un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int i = (int) monDouble;
    Le compilateur renvoie une erreur "possible loss of precision".
    Certes ! Je le sais bien. Je suis conscient que je perds en précision : je souhaite en fait arrondir mon double en int.

    La seule méthode que j'ai trouvée pour l'instant est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public int doubleToInt(double monDouble) {
            long l = Math.round(monDouble);
            String s = ""+l;
            int i;
            try {
                i = Integer.parseInt(s);
            } catch (NumberFormatException e) {
                if (l<0) { i = Integer.MIN_VALUE; } else { i = Integer.MAX_VALUE; }
            }
            return i;
        }
    C'est-à-dire :
    double -> long par Math.round()
    long -> String
    String -> int

    Je sais, ce n'est pas beau. Connaissez-vous une méthode plus propre, et surtout plus efficace ?

    Merci d'avance,
    Cordialement,

    Nicolas

  2. #2
    Membre averti Avatar de dazz_x
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    269
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2006
    Messages : 269
    Points : 328
    Points
    328
    Par défaut
    Si tu utilises Graphics2D, il accepte les doubles, non ? Les AffineTransform sont construites à partir de double, les Shape aussi, donc tu peux ne manipuler que des double....
    Enfin en tous cas, dans mon appli aux fonctionnalités SIG (cartes avec zoom, localisation géographique...), je n'utilise que des doubles !!

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    429
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 429
    Points : 475
    Points
    475
    Par défaut
    Aie, aie, aie.
    Merci beaucoup pour ton message.

    En fait, je faisais quels tests graphiques avec g2.drawRect(). Cette méthode n'accepte apparemment que des int, d'où le problème que j'ai exposé. Mais on peut lui substituer un Rectangle2D.Double, qui aime les double, tout comme tous ses frères et soeurs de Shape.

    Problème résolu. Encore merci.

    Nicolas

  4. #4
    Membre expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Points : 3 080
    Points
    3 080
    Par défaut
    De toute façon, si tu fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    double d = 1.5;
    int i = d;
    Là tu as un message possible lost of precision, mais si tu fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    double d = 1.5;
    int i = (int)d;
    Tu n'as pas d'erreur de compilation...

    Donc je pense que tu as du faire une erreur, le codeque tu as posté tout au début fonctionne...

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    429
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 429
    Points : 475
    Points
    475
    Par défaut
    Après vérification, je crois en effet que je me suis tout simplement planté.
    Je pensais avoir écrit int i = (int) monDouble, et j'ai dû écrire autre chose.
    Merci à tous pour vos messages, et désolé pour ce dérangement inutile.

    Nicolas

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

Discussions similaires

  1. Convertir double en int
    Par Hafa10 dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 27/05/2015, 14h25
  2. Convertir double en int
    Par emna hakem dans le forum C#
    Réponses: 3
    Dernier message: 10/03/2011, 13h03
  3. convertir double en int toujours à zero
    Par royreal dans le forum C#
    Réponses: 3
    Dernier message: 04/04/2010, 16h35
  4. convertir un double en int
    Par saih_tam dans le forum Langage
    Réponses: 2
    Dernier message: 02/05/2007, 14h56
  5. convertir un Double en integer
    Par amelhog dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 17/08/2005, 09h08

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