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 :

Problème de Cast


Sujet :

Langage Java

  1. #1
    Membre du Club
    Inscrit en
    Décembre 2003
    Messages
    135
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 135
    Points : 69
    Points
    69
    Par défaut Problème de Cast
    Bonjour à tous,

    En voulant transformer une variable String de type "00.0" en long, je me retrouve avec l'erreur suivant :

    HTTP JVM: java.lang.NumberFormatException: For input string: "67.0"

    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    Vector attachmentLengths = session.evaluate("@AttachmentLengths", context);
     
    String attachSize = String.valueOf(attachmentLengths.elementAt(1));
     
    long len = Long.parseLong(attachSize);
    J'ai également testé le parseInt mais j'obtiens la même erreur.

    Savez-vous pourquoi il cela ne fonctionne pas svp ?

    Merci.

  2. #2
    Membre expérimenté Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 340
    Points : 1 576
    Points
    1 576
    Par défaut
    Bonjour,

    probablement à cause du séparateur décimal. Selon la langue et l'option choisie, le séparateur décimal est le point ou la virgule.

    Pour connaitre le séparateur décimal actif sur votre machine, utilisez l'instruction suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char separateur_decimal = DecimalFormatSymbols.getInstance().getDecimalSeparator();
    Ensuite, pour éviter des problèmes de non gestion d'exception, encadrez toujours les conversion par un try / catch; par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    try
    {
      montant_double = Double.parseDouble( sChaine );
    }
    catch ( Exception e )
    {
      System.out.println( e.getMessage());
    }
    @ bientôt...

    Salut & @+ sur 3W!

  3. #3
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    comme dit rtg57, 00.0 c'est pas un entier donc forcément.....

    Pour parser un nombre et précisant le séparateur, je préfère utiliser NumberFormat



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DecimalFormat df = new DecimalFormat("###.##",new DecimalFormatSymbols(Locale.ENGLISH));
    double d = df.parse(chaine).doubleValue();

  4. #4
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par rtg57 Voir le message
    probablement à cause du séparateur décimal. Selon la langue et l'option choisie, le séparateur décimal est le point ou la virgule.
    En fait, les long et les int étant des entiers, le séparateur décimal n'a rien à faire là et ne doit pas exister du tout.

    Mais la solution la plus simple est effectivement un Double.parseDouble() et cast vers long (ou alors Math.round() si on ne veut pas tronquer mais arrondir les décimales.)
    Edit: euh, ouais, du coup pour pas se tromper de séparateur de décimales il vaut mieux un DecimalFormat qu'un Double.parseDouble(), c'est pas faux.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre du Club
    Inscrit en
    Décembre 2003
    Messages
    135
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 135
    Points : 69
    Points
    69
    Par défaut
    Merci à tous pour vos réponses.

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

Discussions similaires

  1. [CASTS]problème de cast de Time
    Par DeVoN dans le forum Langage
    Réponses: 7
    Dernier message: 22/02/2006, 17h24
  2. [JDBC Driver][JSTL] Problème de cast de données
    Par GyLes dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 27/09/2005, 10h00
  3. problème de cast!
    Par LaseLiep dans le forum Langage
    Réponses: 3
    Dernier message: 03/06/2005, 09h30
  4. Problème de cast/serialization/externalization ?
    Par Linlin dans le forum CORBA
    Réponses: 1
    Dernier message: 06/12/2004, 16h46
  5. [C#] Problème de casting de @IDENTITY
    Par bilb0t dans le forum Accès aux données
    Réponses: 7
    Dernier message: 03/09/2004, 09h42

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