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 un int ou string en float


Sujet :

Langage Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 122
    Par défaut convertir un int ou string en float
    Bonsoir

    quand je transforme un float (Format 0.XXXX) en binaire j'utilise les fonctions suivantes et ça fonctionne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    int tab=new int[30];
    float ko=ty[k]; //je récupère le float.
     int p= Float.floatToIntBits(ko);  
    String s=Integer.toBinaryString(p);
    char[]resu=s.toCharArray(); 
     
    	        for(int j=0;j<30;j++)    //je le met dans un tableau pour y faire  
                                                     //quelque transformation(+,-..etc)
    	        {
    	        	if(ko==0.0)
    	        		tab[j]=0;
    	        	else
    	          tab[j]=(int)resu[j]-48;
    après quelques transformations j'obtiens un tableau de 1 et 0 et je veux le convertir en float.
    Je le convertit d'abord en String puis le string au float mais ERREUR:

    000Exception in thread "main" java.lang.NumberFormatException: For input string: "[I@3e25a5"
    at sun.misc.FloatingDecimal.readJavaFormatString(Unknown Source)
    at java.lang.Float.parseFloat(Unknown Source)
    j'ai essayé de convertir le string en int puis en float mais la même erreur?? d'après ce que j'ai compris mon string ne peut pas être convertit en entier

    Alors si vous avez une idée sur comment procéder pour que le
    111100100100100011011100100001
    se convertisse en float merci beaucoup de m'aider

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 252
    Par défaut
    ok, j'essaie de comprendre (j'ai modifié le nom des variables) :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    float ko = ... ; // Récupération
    int binaryFloat = Float.floatToIntBits(ko);
     
    // Modifications sur les bits de binaryFloat.
     
    float newFloat = Float.intBitsToFloat(binaryFloat);
    Pourquoi passes-tu par un string ?

    Edit: je crois comprendre...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    float ko = ... ; // Récupération
    int binaryFloat = Float.floatToIntBits(ko);
    String s = Integer.toBinaryString(binaryFloat);
    char[] c = s.toCharArray();
    // Modifications sur les bits de binaryFloat avec les caractères '0' et '1'.
     
    s = new String(c);
    binaryFloat = Integer.valueOf(s, 2); // Transformation en base 2.
    float newFloat = Float.intBitsToFloat(binaryFloat);

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 122
    Par défaut
    salut et merci encore
    je utilise le String à défaut de pouvoir passer par un tableau de int contenant une série de 0 et de 1.
    j'ai essayé ce que tu m'a écris mais à ce niveau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int binaryFloat = Integer.valueOf(s, 2);
    il me génère l'erreur suivante
    Non concordance de type impossible de convertir Integer en int
    normal parce que
    binaryFloat est de type int
    je fais quoi

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 122
    Par défaut
    peut être que je m'exprime mal

    au début j'avais un float que j'ai converti en binaire (méthode voir poste plus
    haut)
    100110111100010010101110001010
    j'ai ensuite fais quelque manipulation sur les bits... par exemple
    100110111100010010101110001010
    est devenu après manip à
    100110111100011111101111111111(*)
    maintenant j'aimerai bien récuperer la format float correspondant à (*)

    NB :100110111100010010101110001010 est contenu dans un tableau de int de taille 30

    si vous avez besoin de plus d'information n'hésitez pas et merci encore

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 122
    Par défaut
    Bon après quelques recherche j'ai trouvée
    pour qui ça intéresse
    Pour transformer mon tableau en chaine j'ai utilisé la concaténation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    for(int j=0;j<4;j++){
    h="";
     for(  rr=0;rr<30;rr++)
    			     {
     h=h+tab[j][rr];
     
    		 }
    et qui me donne
    111101111011000100111011011010
    ensuite je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    BigInteger bi = new BigInteger(h,2);
    		 System.out.println(Float.intBitsToFloat(bi.intValue()));
    qui me donne
    0.023809567
    mais tout n'est pas rose j'obtiens quelque float comme
    1.7E-44
    le E veut dire exponentiel!!??

  6. #6
    Membre expérimenté

    Avatar de mlny84
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    4 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 4 023
    Par défaut
    Citation Envoyé par pipip Voir le message
    mais tout n'est pas rose j'obtiens quelque float comme
    1.7E-44
    le E veut dire exponentiel!!??
    Non, le E correspond à l'écriture scientifique, c'est à dire à une puissance de 10, donc :

    1.7E-44 = 1.7*10^(-44) = 0.000....00017 (ça fait beaucoup de 0)

  7. #7
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 252
    Par défaut
    Une solution plus élégante est la suivante : elle a l'avantage de ne pas utiliser trop d'objets notamment des String, char[] et BigDecimal.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    float ko = ... ; // Récupération
    int binaryFloat = Float.floatToIntBits(ko);
    int[] bits = new int[32];
    for (int i = bits.length - 1; i >= 0; i--) {
      bits[i] = binaryFloat & 1;
      binaryFloat >>= 1;
    }
    assert binaryFloat == 0; // Pas vraiment nécessaire, c'est plutôt pour vérifier la condition finale.
     
    // Traitement
     
    for (int i = 0; i < bits.length; i++) {
      binaryFloat = (binaryFloat << 1) | (bits[i] & 1);
    }
    ko = Float.intBitstoFloat(binaryFloat);

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

Discussions similaires

  1. Convertir un int en string
    Par xeak2008 dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 27/10/2009, 15h58
  2. Convertir un int en string : toString
    Par youna dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 03/09/2008, 17h09
  3. Réponses: 6
    Dernier message: 05/03/2008, 17h03
  4. Réponses: 2
    Dernier message: 25/04/2007, 16h40
  5. Convertir un String en Float
    Par alex75 dans le forum Langage
    Réponses: 3
    Dernier message: 15/06/2006, 19h58

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