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

avec Java Discussion :

comment faire de 2 Strings 1 seul double ?


Sujet :

avec Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    75
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2009
    Messages : 75
    Par défaut comment faire de 2 Strings 1 seul double ?
    Bonjour tout le monde...
    Je suis débutant en dév...
    Je suis en 1ère année de JAVA et je sèche sur un truc...

    J'ai 2 Strings que je reçois en paramètre dans une méthode
    par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    public void maMethode(String Entier, String Decimale){}
    Dans mon autre classe quand j'instancie l'objet et que j'appelle "maMethode"
    je rentre manuellement (juste pour le test) ("3000", "50")

    Je veux avec ces deux Strings en faire un Double...
    C'est à dire qqch dans ce genre :

    double montant; //et que mon double soit égal à 3000,50



    Si qqn a une idée, je suis preneur, merci.

    PS: pour la suite de l'exercice je suis obligé de travailler mes paramètres en String... Pas possible de mettre le double en paramètre au lieu des 2 Strings...

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    J'envisage grosso-modo deux solutions :

    1 - "Démerde-toi Java"

    - Concaténer tes deux paramètres avec une virgule au milieu, pour que ça fasse "3000,50"
    - Utiliser un DecimalFormat pour parser ça en double.

    2 - "Vais l'faire moi-même"

    - Utiliser Integer.parseInt()* pour parser la partie entière et la partie décimale en ints.
    - caster la partie décimale en double.
    - diviser la partie décimale par 10 puissance la longueur de sa String, obtenue avec length(). Ça t'obtiendra un double de valeur 0,50 environ
    - additionner partie entière et partie décimale, ce qui fera environ 3000,50

    * Si les nombres sont grands, il vaut peut-être mieux utiliser Long.parseLong(), ou carrément oublier cette méthode.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre chevronné

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2010
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2010
    Messages : 246
    Par défaut
    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
     
    public void maMethode(String Entier, String Decimale){
     
          int valEntier = Integer.ValueOf("Entier");
          int valDecimale = Integer.ValueOf("Decimal");
     
          int valDouble = valEntier * 100 + valDecimal;
     
          // sit tu le veux en double :
          double tonDouble = valDouble / 100;
     
          // et si tu le veux en String :
          String tonDouble = "" + valDouble/100;
     
    }
    Dans ton exemple cela donnerai :

    maMethode("3000","50")
    ValDouble = 3000 *100 + 50 = 300050
    tonDouble = 300050/100 = 3000,50

    Après ce n'est pas parfait, car il te fait adapter le multiplicateur/diviseur suivant le nombre de chiffre de ton Décimal :

    1 chiffre => 10
    2 chiffres => 100
    etc....
    n chiffres => 10^n

    Voila ce qui vient de me passer par la tête, en espérant que ca pourra t'aider.


    Edit : thelvin, même idée, tu as validé plus tôt ton message lol

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    75
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2009
    Messages : 75
    Par défaut
    Avant toutes choses. Merci pour vos réponses rapides.
    Et dans un deuxième temps, désolé car au vu de vos réponses
    je me dis que ma question était incomplète.

    Mon problème c'est que j'ai besoin de faire des calculs.
    Je m'explique

    calculer plusieurs fois les montants reçus, càd

    Une fois je reçois "3000", "50"
    Une autre fois "1000","95"
    et boum ça me fait un chiffre décimal à 3 positions
    et cela peut aller jusqu'à 4 décimales si je reçois beaucoup beaucoup de montants.

    Si par exemple mon chiffre décimal est de "1500"//centimes
    Je dois transférer le "15" de "1500" dans les entiers...

    Je me suis creuser la tête déjà.
    J'ai fait plusieurs tests avec des system.out.println mais rien à faire
    Je n'obtiens pas le résultat souhaité.

    Merci d'avance.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    173
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 173
    Par défaut
    Pour faire au plus simple, je suggère la concatenation, puis passer par le constructeurs.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public void maMethode(String Entier, String Decimale){
     
    Double d = new Double(Entier + "," + Decimal)      
     
    }
    Je pense que cela pourrait suffire.

    PS : petit conseil au passage, évite de créer des paramètres ou variable avec une lettre majuscule à la première lettre, la première lettre devrait être en minuscule. Cela fait des Best-Practice Java...

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    75
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2009
    Messages : 75
    Par défaut
    Citation Envoyé par amine_en_france Voir le message
    Pour faire au plus simple, je suggère la concatenation, puis passer par le constructeurs.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public void maMethode(String Entier, String Decimale){
     
    Double d = new Double(Entier + "," + Decimal)      
     
    }
    Je pense que cela pourrait suffire.

    PS : petit conseil au passage, évite de créer des paramètres ou variable avec une lettre majuscule à la première lettre, la première lettre devrait être en minuscule. Cela fait des Best-Practice Java...


    OK conseil retenu, merci
    Ton idée est pas mal du tout,
    mais reste mon problème de passer les décimales en entier
    si + de 2 décimales

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    173
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 173
    Par défaut
    Citation Envoyé par CosaNostra Voir le message
    mais reste mon problème de passer les décimales en entier
    si + de 2 décimales
    Je ne comprends pas bien ce que tu veux faire....

    Ton String Decimal peut etre aussi grand que tu veux.

    Si tu fais un String du genre "3000,21354" la classe double va te le transformer en un nombre.

    C'est pas ce que tu voulais?

  8. #8
    Membre chevronné

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2010
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2010
    Messages : 246
    Par défaut
    ok ok, donc si je comprend bien le problème après les précisions, si tu as par exemple 1234 comme Decimal, tu dois faire comme si cela était 12,34 ?

    Entier 3000
    Decimal 1234

    => Double 3012,34 ?

  9. #9
    Membre chevronné

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2010
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2010
    Messages : 246
    Par défaut
    si tel est le cas, un truc du genre devrait faire l'affaire :

    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
    16
    17
     
    public void maMethode(String entier, String decimale){
     
    int valEntier = Integer.valueOf("entier");
    int entierBis = 0;
     
          if(decimale.length() == 3){
                entierBis = Integer.valueOf(decimale.substring(0,1));
                decimale = decimale.substring(1);
          }
          if(decimale.length() == 4){
                entierBis = Integer.valueOf(decimale.substring(0,2));
                decimale = decimale.substring(2);
          }
     
    double tonDouble = new double((valEntier+entierBis)+","+decimale);
    }
    Voila, ca devrait marcher pour des décimales de taille 0,1,2,3 ou 4


    ps : Bonne idée le constructeur amine_en_france

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    75
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2009
    Messages : 75
    Par défaut
    Citation Envoyé par michon Voir le message
    ok ok, donc si je comprend bien le problème après les précisions, si tu as par exemple 1234 comme Decimal, tu dois faire comme si cela était 12,34 ?

    Entier 3000
    Decimal 1234

    => Double 3012,34 ?
    NICKEL !!!!!
    Je vais voir si ça joue ce soir avec mon code
    Mais tu as parfaitement compris ce que je cherchais

    Je vous redis dans la nuit ou demain

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    75
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2009
    Messages : 75
    Par défaut
    Donc avec le constructeur a Amine_en_france
    et la petite méthode a michon, ça devrait faire l'affaire...

    J'essaierais ce soir... merci à vous

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    173
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 173
    Par défaut
    Citation Envoyé par michon Voir le message
    si tel est le cas, un truc du genre devrait faire l'affaire :

    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
    16
    17
     
    public void maMethode(String entier, String decimale){
     
    int valEntier = Integer.valueOf("entier");
    int entierBis = 0;
     
          if(decimale.length() == 3){
                entierBis = Integer.valueOf(decimale.substring(0,1));
                decimale = decimale.substring(1);
          }
          if(decimale.length() == 4){
                entierBis = Integer.valueOf(decimale.substring(0,2));
                decimale = decimale.substring(2);
          }
     
    double tonDouble = new double((valEntier+entierBis)+","+decimale);
    }
    Voila, ca devrait marcher pour des décimales de taille 0,1,2,3 ou 4


    ps : Bonne idée le constructeur amine_en_france
    Ca me parait un peu triste cette façon de faire.

    Si j'ai bien compris, si un decimal vaut 1234, cela voudra dire qu'on parle de 12.34 => Donc ABSOLUMENT 2 nombres après la virgule...

    Si c'est le cas et pour éviter de mettre trop de boucle et de condition, (parce que quand on aura 7 chiffre, il faudra mettre d'autres conditions...) il suffit de parser le Decimal en Integer (avec le constructeur de Integer, de Double ou autre... Bref plein de façon de faire) et de diviser par 100
    ca donnera un code du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    double decimal = new Double(Decimal)/100
    Cela te donnera ton décimal avec 2 nombre après la virgule, puis faire la somme avec ton entier apres l'avoir parser.

    J'ai l'impression que j'ai pas compris qq chose... Mais il y a plus simple à faire que de mettre plein de boucles et de confitions

    PS : Il serai interessant de voir comment dynamiser le decoupage de la string au lieu de faire if(decimal.lengh()==3) puis 4 puis ... pour cela, je suggère de stoker la longueur de la chaine dans une variable te de s'en servir...

  13. #13
    Membre chevronné

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2010
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2010
    Messages : 246
    Par défaut
    il me semble qu'il a précisé que "decimale" avait au maximum une longueur de 4.

    maintenant pour dynamiser...


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    int length = decimale.length();
     
          if(length >= 2){
                entierBis = Integer.valueOf(decimale.substring(0,length-2));
                decimale = decimale.substring(length-2);
          }
    Les deux fonctionneront... et je ne serais pas vexé si ma solution n'est pas la meilleure :p

    Du moment que la personne a une réponse ou piste à son problème....

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    75
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2009
    Messages : 75
    Par défaut
    Citation Envoyé par amine_en_france Voir le message
    Ca me parait un peu triste cette façon de faire.

    Si j'ai bien compris, si un decimal vaut 1234, cela voudra dire qu'on parle de 12.34 => Donc ABSOLUMENT 2 nombres après la virgule...

    Si c'est le cas et pour éviter de mettre trop de boucle et de condition, (parce que quand on aura 7 chiffre, il faudra mettre d'autres conditions...) il suffit de parser le Decimal en Integer (avec le constructeur de Integer, de Double ou autre... Bref plein de façon de faire) et de diviser par 100
    ca donnera un code du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    double decimal = new Double(Decimal)/100
    Cela te donnera ton décimal avec 2 nombre après la virgule, puis faire la somme avec ton entier apres l'avoir parser.

    J'ai l'impression que j'ai pas compris qq chose... Mais il y a plus simple à faire que de mettre plein de boucles et de confitions

    PS : Il serai interessant de voir comment dynamiser le decoupage de la string au lieu de faire if(decimal.lengh()==3) puis 4 puis ... pour cela, je suggère de stoker la longueur de la chaine dans une variable te de s'en servir...


    Pas mal aussi, et peut-être même la solution que je vais adopter...
    A ce moment là faudra juste que je transforme mon "Entier" en double aussi...
    Mais je vais essayer ça cette nuit car la je n'ai pas mon eclipse sous la main et mon code... Merci à vous autres (professionnels) pour la façon de simplifier
    le code et les explications pour nous autres novices...
    Merci amine et michou surtout, qui vont me permettre de continuer a avancer dans mon exercice...

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    75
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2009
    Messages : 75
    Par défaut
    Après essais, le résultat n'est pas celui attendu.
    Je m'explique...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public double creerTotal(){
    		double totalMontant = 0;
    		double entier = 0;
    		double decimal = 0;
    		for (int i =0; i < this.count(); i++){
    			decimal = new Double(list.get(i).getDecimal())/100;
    			entier = new Double(list.get(i).getEntier());
    			totalMontant = entier + decimal;
    		}
    		return totalMontant;
    	}

    Lorsque je fais un System.out.println dans ma classe de tests de creerTotal
    Il m'affiche 0.5

    Alors que mon entier est seté à 3'000 et mon decimal a 50...

    qqn saurait de quoi ça peut venir ?

  16. #16
    Membre chevronné

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2010
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2010
    Messages : 246
    Par défaut
    A quoi correspond ici "this.count()" ? ne devrait-tu pas avoir une variable et avoir quelque chose du genre "this.list.legth()" ou alors "count()" est une méthode que tu as définis ?

    Si tu fais un "System.out.println(this.count());" ca donne quoi ?

    Sinon personnellement je réorganiserais un poil le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public double creerTotal(){
    		double totalMontant = 0;
    		double entier = 0;
    		double decimal = 0;
    		for (int i =0; i < this.count(); i++){
    			decimal = new Double(list.get(i).getDecimal()/100);
    			entier = new Double(list.get(i).getEntier());
    		}
    		return entier+decimal;
    	}
    Après juste pour chipoter, il me semble que "entier" tu peux le declarer "int" (taille mémoir inférieure). Et ta liste "list" contient quoi comme type de données ?

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    173
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 173
    Par défaut
    On peut avoir plus de detail sur le code.

    Genre tu mets quoi dans list?

    Le reste devrait fonctionner normalement.

  18. #18
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    75
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2009
    Messages : 75
    Par défaut
    En fait le this fais référence à mon ArrayListe
    dans mon arrayliste je mets des objets depuis une autre classe
    mais ça, ça marche bien, j'arrive à extraire les données des objets...

    Dailleurs dans cette classe ci j'ai également une méthode "get" une "count" et une "addNew"

    A part l'ArrayListe, aucune variable de classe...


    Si je fais un system.out.println de this.count() ça me donne rien,
    par contre si je l'utilise depuis ma classe de test ou j'ai instancié tous mes objets
    ça me donne "1"... car j'ai ajouté un seul objet à mon array liste (pour le test)

    Ce que j'ajoute dans mon arrayliste ce sont des objets codes qui font dans les 300 caractères
    que je vais par la suite enregistrer dans un fichier texte (mais plus tard) mais genre j'ai des bouts de codes assemblés....
    on y retrouve des dates, des codes de banques, des adresses et des noms entre autres...

  19. #19
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    173
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 173
    Par défaut
    J'ai essayer de dérouler ton test et ca marche!

    Petite question : ton entier c'est 3000 ou 3'000? (Je suppose que c'est juste une faute de frappe)

    Puis, ton total va te retourner la derniere valeurs formé, affiche le contenu de tes liste

  20. #20
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    75
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2009
    Messages : 75
    Par défaut
    Peut-être un manque d'attention de ma part ...
    Je réessaierais ce soir.

    Pour le chiffre oui, c'est 3000...

Discussions similaires

  1. Réponses: 3
    Dernier message: 18/11/2011, 19h23
  2. [JDOM] comment faire : Xml to String
    Par boukharyinfos dans le forum Format d'échange (XML, JSON...)
    Réponses: 5
    Dernier message: 19/05/2009, 20h16
  3. Réponses: 2
    Dernier message: 04/06/2008, 01h31
  4. Comment faire passer un string en ligne de commande ?
    Par cococococococo dans le forum Interfaces Graphiques
    Réponses: 5
    Dernier message: 27/06/2007, 17h15
  5. [Conversion]Comment faire pour couper un Double trop long?
    Par dessinateurttuyen dans le forum Général Java
    Réponses: 1
    Dernier message: 13/11/2005, 02h22

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