1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    mai 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : mai 2017
    Messages : 7
    Points : 5
    Points
    5

    Par défaut Problème de conversion d'un String en double

    Bonjour je rencontre un petit problème qui m'empêche d'avancer comme je le souhaite:

    je dévellope actuellement un petite interface qui va traiter des données excel calculer depuis imageJ.
    Pour ce faire j'enregistre la table de résultats de imageJ au format .csv puis ensuite j'ai utilisé un programme d'un utilisateur qui traite les données du .csv
    afin de remetre en ordre mes données :


    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    ArrayList arList=null;
    ArrayList al=null;
    String fName = a; // avant j'ai programmé la demande d'ouverture de fichier stocker dans la variable String a
    String thisLine;
    int count=0;
    FileInputStream fis = new FileInputStream(fName);
    DataInputStream myInput = new DataInputStream(fis);
    int icv=0;
    arList = new ArrayList();
    while ((thisLine = myInput.readLine()) != null)
    {
    al = new ArrayList();
    String strar[] = thisLine.split(",");
    for(int j=0;j<strar.length;j++)
    {
    al.add(strar[j]);
    }
    arList.add(al);
    System.out.println();
    icv++;
    }
     
    try
    {
    HSSFWorkbook hwb = new HSSFWorkbook();
    HSSFSheet sheet = hwb.createSheet("new sheet");
    for(int k=0;k<arList.size();k++)
    {
    ArrayList ardata = (ArrayList)arList.get(k);
    HSSFRow row = sheet.createRow((short) 0+k);
    for(int p=0;p<ardata.size();p++)
    {
    HSSFCell cell = row.createCell((short) p);
    String data = ardata.get(p).toString();
    if(data.startsWith("=")){
    cell.setCellType(HSSFCell.CELL_TYPE_STRING);
    data=data.replaceAll("\"", "");
    data=data.replaceAll("=", "");
    data=data.replace(".", ",");
     
    cell.setCellValue(data);
    }else if(data.startsWith("\"")){
    data=data.replaceAll("\"", "");
    data=data.replace(".", ",");
     
    cell.setCellType(HSSFCell.CELL_TYPE_STRING);
    cell.setCellValue(data);
    }else{
    data=data.replaceAll("\"", "");
    data=data.replace(".", ",");
     
    cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
    cell.setCellValue(data);
    }
    //*/
    // cell.setCellValue(ardata.get(p).toString());
    }
    System.out.println();
    }
    icsv1= a.indexOf(".csv");
    a=a.substring(0,icsv1)+".xls";
    FileOutputStream fileOut = new FileOutputStream(a);
    hwb.write(fileOut);
    fileOut.close();
    System.out.println("Your "+a+ " excel file has been generated");
    } catch ( Exception ex ) {
    ex.printStackTrace();
    } //main method ends

    Seulement par cette méthode tous le fichier est au format Text et j'aimerai que dans ma feuille excel les nombre devienne donc des nombre au format Double.

    En cherchant sur le net et sur le site j'ai essayer de régler le problème avec une petite boucle;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
         double newData;
         for (int col=3; col < lastColumn_cvs ; col++) {
        	 for (int i=1; i<LastLigne_cvs+1;i++) {
        		 cell_cvs = sheet_cvs.getRow(i).getCell((short)col);
        		 String data=cell_cvs.getStringCellValue();
        		 if (data.startsWith("")){
     
        			 newData=Double.parseDouble(data);
        			 cell_cvs.setCellValue(newData);	 
     
    }// les cellules choisie comportent les données que je veut récupéré
    Seulement je reçoit l'erreur :

    Exception in thread "main" java.lang.NumberFormatException: For input string: "6107,854"
    at sun.misc.FloatingDecimal.readJavaFormatString(Unknown Source)
    at sun.misc.FloatingDecimal.parseDouble(Unknown Source)
    at java.lang.Double.parseDouble(Unknown Source)
    at Excel.main(Excel.java:355)
    Je débute en java et pour le coup je n'arrive pas à m'en sortir cette fois-ci.
    Je vous remercie d'avance pour l'aide que vous pourrez m'apporter.

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java/Eclipse RCP
    Inscrit en
    septembre 2009
    Messages
    10 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java/Eclipse RCP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : septembre 2009
    Messages : 10 291
    Points : 24 713
    Points
    24 713
    Billets dans le blog
    2

    Par défaut

    Salut,

    Double.parseDouble() ne fonctionne qu'avec des nombres avec un caractère point (.) comme virgule. Pour convertir un String contenant un nombre localisé français, avec un caractère virgule (,) comme virgule, on peut utiliser un NumberFormat, ou un DecimalFormat.

    Mais pourquoi chercher à stocker dans une cellule un nombre en String pour le reconvertir en double en relisant la cellule ? Autant directement le stocker en nombre. En plus, c'est ton code qui modifie le point en virgule. Laisse le point et fait la conversion en double avec Double.parseDouble().

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    data=data.replaceAll("\"", "");
    data=data.replaceAll("=", "");
     
    double nombre = Double.parseDouble(data); 
    cell.setCellValue(nombre);
    tout simplement.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    mai 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : mai 2017
    Messages : 7
    Points : 5
    Points
    5

    Par défaut Salut et merci

    En effet après mettre reposé un petit peu et pris le temps de bien tout relire je me suis aperçu que le remplacement du "." par une virgule était mon problème.
    Je l'ai donc changer et mon code marche comme je le souhaite. Merci quand même pour l'éclaircissement qui m'a permis d'enlever quelque ligne de code en trop^^.
    Et je vous remercie aussi pour les messages concernant l'écriture des messages sur le forum c:

    Je passe donc la discussion en résolue =D.

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java/Eclipse RCP
    Inscrit en
    septembre 2009
    Messages
    10 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java/Eclipse RCP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : septembre 2009
    Messages : 10 291
    Points : 24 713
    Points
    24 713
    Billets dans le blog
    2

    Par défaut

    Citation Envoyé par Aurelien2d Voir le message
    qui m'a permis d'enlever quelque ligne de code en trop^^.
    Ça, j'en ai pas parlé, mais il y a probablement d'autres lignes de code superflues. je n'ai pas tout analyser en détail, mais je pense que les ArrayLists intermédiaires sont inutiles. Le code pourrait être bien réduit également en utilisant Files.line() pour lire le fichier d'éntrée.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 30/11/2011, 10h04
  2. Conversion du format d'une plage de cellules Excel
    Par tarbala dans le forum API, COM et SDKs
    Réponses: 0
    Dernier message: 12/06/2009, 23h47
  3. [VBA-E] recuperer le texte d un commentaire de cellule excel
    Par Verbal-Quint dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 15/07/2004, 10h27
  4. [D7-EXCEL2000] Formule dans cellule Excel qui ne se calcule pas
    Par Albertolino dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 09/09/2003, 14h18
  5. Récupérer la couleur d'une cellule excel par Delphi
    Par teamsebracing dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 05/06/2003, 14h50

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