Partage
  • Partager sur Facebook
  • Partager sur Twitter

[JAVA] Conversion chaine de caractères en nombre

Sujet résolu
    27 février 2017 à 16:35:18

    Bonjour,

    je suis le cours de Java et j'ai un soucis sur la partie conversion. J'utilise Eclipse et voici mon programme ainsi que le message d'erreur :

    La conversion en chaine de caractères s'est bien passée mais dans le sens inverse, ça ne veut pas. Je me suis pourtant inspiré de l'exemple du cours :

    Qu'est-ce qui ne va pas ? Merci d'avance.

    • Partager sur Facebook
    • Partager sur Twitter
      27 février 2017 à 16:57:17

      Salut,

      Integer.valueOf() s'attend à recevoir une string contenant un nombre au format int, hors toi tu lui passes une string contenant un nombre au format double. 

      double nbre3 = Double.valueOf(affichage);

      Autrement pour convertir en chaine de caractères pourquoi ne pas faire simplement :

      affichage += resultat;
      • Partager sur Facebook
      • Partager sur Twitter
        27 février 2017 à 17:12:19

        Bonjour

        affichage est un double au format string... donc faire par

         Double.valueOf(affichage).doubleValue();

        • Partager sur Facebook
        • Partager sur Twitter
          27 février 2017 à 17:48:40

          Merci Patrice. Ca marche. Je n'avais pas fait le rapprochement entre int et Integer. Je croyais que Integer marchait peu importe le format du nombre dans la chaine de caractères.

          La méthode de Kolfering marche aussi mais je ne la comprends pas. Mes connaissances sont encore limitées donc je ne comprends pas l'utilisation du += entre 2 variables de type distinct. Pour l'instant, mon utilisation du += se limite uniquement à l'incrémentation.

          • Partager sur Facebook
          • Partager sur Twitter
            27 février 2017 à 18:31:12

            je pense qu' en fait cela fait une concaténation ...et sur le principe je suis d'accord qu'on doit travailler sur des type identiques

            double x=10.3;

            String s="";

            System.out.println(s+x);

            ici s+x sera la concaténation d'un chaîne vide  et de la chaine "10.3" ... mais je pense qu'il vaut mieux éviter car sur le fond en java une chaîne de caractère est non mutable ( =non  modifiable comme en python ) et d'après ce que j'ai lu ( je débute aussi ...sauf que je suis  un peu plus loin dans le cours ) cela revient à chaque fois que l'on fait string =string +"..." on crée une nouvelle instance d'un string ( donc l'ancien reste en mémoire ) donc on utilise de la mémoire pour rien ...

            Bref je dirai à éviter , sans parler du fait que si 10.3 remplacé par 1/3 cela ne marche plus ( à mon avis )

            • Partager sur Facebook
            • Partager sur Twitter
              27 février 2017 à 19:00:29

              Merci pour l'explication. Je clos le sujet.
              • Partager sur Facebook
              • Partager sur Twitter
                27 février 2017 à 21:23:40

                FromagerPatrice a écrit:

                je pense qu' en fait cela fait une concaténation ...et sur le principe je suis d'accord qu'on doit travailler sur des type identiques

                double x=10.3;

                String s="";

                System.out.println(s+x);

                ici s+x sera la concaténation d'un chaîne vide  et de la chaine "10.3" ... mais je pense qu'il vaut mieux éviter car sur le fond en java une chaîne de caractère est non mutable ( =non  modifiable comme en python ) et d'après ce que j'ai lu ( je débute aussi ...sauf que je suis  un peu plus loin dans le cours ) cela revient à chaque fois que l'on fait string =string +"..." on crée une nouvelle instance d'un string ( donc l'ancien reste en mémoire ) donc on utilise de la mémoire pour rien ...

                Bref je dirai à éviter , sans parler du fait que si 10.3 remplacé par 1/3 cela ne marche plus ( à mon avis )



                Oui une nouvelle chaîne est créée lors de la concaténation et oui String est immuable. Cependant ça ne pose pas de problème au contraire, le garbage collector se charge de supprimer de la mémoire les objets qui ne sont pas/plus référencés, donc dans des cas comme System.out.println(s+x) où on ne garde pas de référence vers l'objet, celui-ci sera retiré de la mémoire. D'autant plus qu'on n'utilise pas de string literals, qui ne seront donc pas stockés dans le string constant pool, donc aucune trace en mémoire.

                Sinon je ne vois pas pourquoi ça ne marcherait pas avec une valeur tel que 1/3 (ou plutôt 1./3)

                • Partager sur Facebook
                • Partager sur Twitter

                [JAVA] Conversion chaine de caractères en nombre

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown