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

Développement de jobs Discussion :

comment convertir une colonne string en float


Sujet :

Développement de jobs

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 106
    Points : 54
    Points
    54
    Par défaut comment convertir une colonne string en float
    Bonjour à tous j'essaye de convertir quelques colonnes de type string en float, j'ai utilisé un Tmap et j'ai inséré le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Float.valueOf(row1.SOLDEAVANTTRIMESTRE).floatValue()
    mais malheureusement il m'affiche ce message d'erreur :
    Exception in component tMap_1
    java.lang.NumberFormatException: For input string: "-357,46"
    at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1222)
    je pense qu'il accepte pas le format -357,46 à cause de la virgule ou du -.
    est ce que quelqu'un a une réponse SVP.

  2. #2
    Membre expérimenté Avatar de Benoit_Durand
    Profil pro
    Consultant en Business Intelligence Freelance
    Inscrit en
    Mars 2005
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence Freelance

    Informations forums :
    Inscription : Mars 2005
    Messages : 861
    Points : 1 308
    Points
    1 308
    Par défaut
    Oui la virgule sûrement.
    Un replace avant pour changer la , en . devrait faire l'affaire.
    Il y a peut être des moyens plus intelligents de le faire.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 106
    Points : 54
    Points
    54
    Par défaut
    enfaite, j'ai essayé d’insérer un replace en minuscule, mais je ne connais pas la syntaxe correcte,
    j'ai essayé ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new Float(row1.SOLDEAVANTTRIMESTRE.replace(',','.'));    Float.parseFloat(row1.SOLDEAVANTTRIMESTRE)
    et ça n'a pas marché.

  4. #4
    Membre émérite
    Avatar de haskouse
    Homme Profil pro
    Salesforce
    Inscrit en
    Août 2009
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Maroc

    Informations professionnelles :
    Activité : Salesforce
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2009
    Messages : 923
    Points : 2 684
    Points
    2 684
    Par défaut
    Salut, la syntaxe suivante devrait marcher :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Float.valueOf(row1.SOLDEAVANTTRIMESTRE.replace(',', '.'))
    Bonne chance.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 106
    Points : 54
    Points
    54
    Par défaut
    Salut et merci pour la réponse, ça m'a affiché l'erreur suivante:

    Exception in component tMap_1
    java.lang.NumberFormatException: For input string: "0,00"
    at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1222)

  6. #6
    Membre émérite
    Avatar de haskouse
    Homme Profil pro
    Salesforce
    Inscrit en
    Août 2009
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Maroc

    Informations professionnelles :
    Activité : Salesforce
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2009
    Messages : 923
    Points : 2 684
    Points
    2 684
    Par défaut
    Est ce que tu as bien copié la syntaxe que je t'ai donné ??
    J'ai réalisé plusieurs test sur mon poste et ça marche, même avec le "0,00" !!

    Peut être que l'environnement sur lequel tu travailles à un séparateur de décimal diffèrent de celui de mon environnement.

    Essai de permuter le point et la virgule et de voir ce que ça donne !!

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 106
    Points : 54
    Points
    54
    Par défaut
    Oui mon frere, avec ton code exactement ça donne l'erreur du "0,00" et lorsque je permute entre la virgule et le point ça donne la premiere erreur c a d:
    java.lang.NumberFormatException: For input string: "-357,46"
    at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1222)

  8. #8
    Membre émérite
    Avatar de haskouse
    Homme Profil pro
    Salesforce
    Inscrit en
    Août 2009
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Maroc

    Informations professionnelles :
    Activité : Salesforce
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2009
    Messages : 923
    Points : 2 684
    Points
    2 684
    Par défaut
    Ah je vois !!

    Essai de créer une colonne de type String, et dans le tMap tu mets juste cette partie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    row1.SOLDEAVANTTRIMESTRE.REPLACE(',', '.')
    Et dis moi ce que ça donne !

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 106
    Points : 54
    Points
    54
    Par défaut
    ça donne ça
    Exception in component tMap_1
    java.lang.NumberFormatException: For input string: "0,00"
    at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1222)

  10. #10
    Membre émérite
    Avatar de haskouse
    Homme Profil pro
    Salesforce
    Inscrit en
    Août 2009
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Maroc

    Informations professionnelles :
    Activité : Salesforce
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2009
    Messages : 923
    Points : 2 684
    Points
    2 684
    Par défaut
    Hhh

    ça c'est bizarre,
    Alors cette fois-ci essai juste ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    row1.SOLDEAVANTTRIMESTRE
    En fait je réduis le code pour essayer de localiser le problème.

  11. #11
    Membre actif Avatar de sofiane_bfm007
    Profil pro
    Consultant Décisionnel
    Inscrit en
    Mai 2008
    Messages
    261
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Consultant Décisionnel

    Informations forums :
    Inscription : Mai 2008
    Messages : 261
    Points : 242
    Points
    242
    Par défaut
    Bonjour,

    Essaie de créer cette routine :

    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
    18
    package routines;
     
    public class Routines {
     
                                 public static int VAL_DEFAUT_NUMERIQUE = 0;
    /**
                      * Fonction de conversion de String en Float - Retourne la valeur numérique par défaut s'il y a une exception
                      * @param aSource String a convertir
                      * @return Float Resultat. - Retourne la valeur numérique par défaut s'il y a une exception
                      */
                    public static float String2Float(String aSource) {
                                   if (aSource==null)
                                                   return VAL_DEFAUT_NUMERIQUE;
     
                                    return formatNumber(aSource.replace(",", "."));
     
                     }
    }
    Bon courage

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 106
    Points : 54
    Points
    54
    Par défaut
    ça donne toujours ça:
    Exception in component tMap_1
    java.lang.NumberFormatException: For input string: "0,00"
    at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1222)

  13. #13
    Membre émérite
    Avatar de haskouse
    Homme Profil pro
    Salesforce
    Inscrit en
    Août 2009
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Maroc

    Informations professionnelles :
    Activité : Salesforce
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2009
    Messages : 923
    Points : 2 684
    Points
    2 684
    Par défaut
    Est ce que tu peux vérifier si la variable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    row1.SOLDEAVANTTRIMESTRE
    dans laquelle tu lis est de type String ??

    Apparemment ce n'est pas le cas !!
    J'ai l'impression que c'est au moment de lecture que ton erreur apparait et non pas lors de la transformation tMap.

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 106
    Points : 54
    Points
    54
    Par défaut
    Oui j'ai bien vérifié que c'est String, je t'explique j'ai une table postGres et je veux transformer les colonnes qui contiennent des nombres en float pour lire toute la table et l’insérer dans une autre table PostGres.
    la c'est la virgule qui fait le problème.
    je vais refaire tous ce que tu m'as dit avant et voir apres.

  15. #15
    Membre émérite
    Avatar de haskouse
    Homme Profil pro
    Salesforce
    Inscrit en
    Août 2009
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Maroc

    Informations professionnelles :
    Activité : Salesforce
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2009
    Messages : 923
    Points : 2 684
    Points
    2 684
    Par défaut
    Essai de m'envoyer un une capture de ton job + capture de ton tMap + capture des schéma d'entrée et de sortie.

    Sinon tu peux m'envoyer le job en entier ce sera mieux !!
    A toi de voir.

  16. #16
    Membre du Club
    Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mars 2011
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mars 2011
    Messages : 42
    Points : 49
    Points
    49
    Par défaut
    Une solution alternative :

    Lorsque tu importes tes données avec un tInputPostGre, dans la colonne que tu veux convertir tu mets directement le type de variable (Float dans le cas présent) et le tour est joué.

    De plus après si tu en as besoin string, il sera plus facile de faire un toString()!

    En espérant que ça t'aide.

  17. #17
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 106
    Points : 54
    Points
    54
    Par défaut
    Je m'excuse, pour le temps perdu en faite la bonne instruction est cella :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Float.valueOf(row1.SOLDEAVANTTRIMESTRE.REPLACE(',', '.'))
    elle fonctionne très bien sauf REPLACE en minuscule.
    je m'excuse encore une fois et grand merci pour vous les deux.
    Résolu.

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

Discussions similaires

  1. [C#] Comment convertir une String en float ?
    Par DestinyWar45 dans le forum C#
    Réponses: 7
    Dernier message: 08/10/2010, 04h19
  2. Réponses: 2
    Dernier message: 10/04/2007, 12h39
  3. [FAQ]Comment convertir une std::string en AnsiString ?
    Par Invité dans le forum C++Builder
    Réponses: 2
    Dernier message: 26/11/2006, 18h08
  4. Comment convertir une variable string en double?
    Par quentinoux dans le forum C++
    Réponses: 12
    Dernier message: 31/07/2006, 10h46
  5. Réponses: 6
    Dernier message: 14/02/2004, 14h01

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