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

Android Discussion :

Caster int en double


Sujet :

Android

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 256
    Par défaut Caster int en double
    Bonjour,
    Je souhaite caster un int en double parce que j'ai une variable qui doit absolument accueillir un double
    Le problème c'est que si je cast 2678339000 j'obtiens 2.678339E9. En soit, c'est la même chose mais ça ne passe pas les tests JUnit.

    Merci

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    757
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 757
    Par défaut
    Quel est le test JUnit en question ? Peut-être a-t-il besoin d'un int et pas d'un double.

  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
    Citation Envoyé par poussinvert Voir le message
    Le problème c'est que si je cast 2678339000 j'obtiens 2.678339E9. En soit, c'est la même chose mais ça ne passe pas les tests JUnit.
    Heu ça change rien. Si ton unit test foire, c'est qu'il manipule des String et pas des doubles!

  4. #4
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2007
    Messages
    697
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 697
    Par défaut
    A noter que Eclipse me signal que 2678339000 ne tient pas dans un int . Dans un double, elle tiendra par contre dans un float elle ne sera pas exacte.

    Citation Envoyé par tchize_ Voir le message
    Heu ça change rien. Si ton unit test foire, c'est qu'il manipule des String et pas des doubles!
    Tu as sortie la boule de cristal pour deviner qu'il utilise des String

    Sinon au cas où, la comparaison entre String se fait avec la méthode equals() et pas l'opérateur ==.

  5. #5
    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
    Citation Envoyé par atha2 Voir le message

    Tu as sortie la boule de cristal pour deviner qu'il utilise des String
    Vu que la présence du E coince son test, c'est qu'il utilise des String, sinon le E n'existe pas

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 256
    Par défaut
    Excusez moi je me suis trompé :
    Je parlais de long :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    assertEquals(2678339000l, StatisticTools.calculateTimeDifferenceInMilli(1375445968000l, 1378124307000l));
    C'est une différence de temps réalisée en timestamp bien entendu.

    Il faut absolument que je récupère mon résultat en double :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    	public static Double calculateTimeDifferenceInMilli(long timeNextPoint,
    			long timePreviousPoint) {
    		long temp = (long)  (Math.abs(timeNextPoint-timePreviousPoint));
    		Double difference = (double)temp;
    		//DecimalFormat df = new DecimalFormat("0");
    		return difference;
    	}

  7. #7
    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
    Il y a plusieurs erreurs dans ton code:
    1) tu compare des long, mais tu renvoie la réponse en virgule flottante. A partir d'un certain niveau, ton double ne pourra pas stocker autant de précision que le long, et tu obtiendras un résultat approximatif
    2) tu utilise un Double (l'objet) et non un double (le type primitif). Du coup, comme tu fais un assertEquals(int, Double) et que cette méthode n'existe pas, java utilise la méthode assertEquals(Object, Object) après avoir promus ton int en Integer. Et un Integer, ce n'est pas une Double, donc ton test ne pourra qu'échouer
    3) on ne compare jamais de int directement à des double en raison du problème de précision, on compare des doubles entre eux
    4) pour une assertion entre les doubles, on utilise un delta, qui est la marge d'erreur tolérée.

    Dans ton cas, ton code de test devrait être:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    assertEquals(26783390001.0, StatisticTools.calculateTimeDifferenceInMilli(1375445968000l, 1378124307000l),0.001);
    bien qu'il serait plus sage de revoir ta méthode pour qu'elle retourne un long. En effet, si tu teste ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    		long l = 8523372036854775333l;
    		System.out.println(l);
    		System.out.println((double)l);
    		System.out.println((long)(double)l);
    tu verra qu'un long ça ne rentre pas dans un double

Discussions similaires

  1. [Conversion]int to double
    Par frouge dans le forum Général Java
    Réponses: 6
    Dernier message: 03/02/2012, 09h34
  2. passage des int au double
    Par alex01pernot dans le forum Débuter
    Réponses: 3
    Dernier message: 01/05/2010, 15h34
  3. long int VS double
    Par Naira dans le forum C++
    Réponses: 3
    Dernier message: 02/03/2007, 11h34
  4. transformer int en double
    Par nherment dans le forum C
    Réponses: 8
    Dernier message: 13/01/2007, 21h33
  5. int vs double: qui est le plus rapide?
    Par Chewbi dans le forum C++
    Réponses: 23
    Dernier message: 25/03/2006, 02h58

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