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

JavaScript Discussion :

Formater un nombre dans un champ en locale FR


Sujet :

JavaScript

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Mars 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2017
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Formater un nombre dans un champ en locale FR
    Bonjour,

    Je conçois actuellement un formulaire qui s'intègre dans un logiciel métier. L'éditeur de ce formulaire est un WYSIWYG développé par le concepteur du logiciel. Il est possible de mettre du code en Java sur les champs (On Leave, On Validate...)

    J'ai créé 2 champs TextBox dans lesquels je voudrais n'avoir que des nombres, en locale française ( # ###,## ). J'ai la possibilité de mettre un code Java On Leave sur ce champ.

    Je voudrais donc que ce code affiche une erreur quand ce qui est saisi est autre chose que des chiffres.
    Et éventuellement, que le séparateur de décimale soit transformé en virgule si un point a été tapé.

    J'ai cherché un peu et ai trouvé la fonction numberFormat. Mais je ne m'en sors pas avec la syntaxe...

    Quelqu'un aurait une idée de la façon de procéder ?


    Merci beaucoup.

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Formater un nombre, c'est transformer ce nombre (int ou Integer, double, etc) en String. Ce que tu cherches à faire c'est vérifier qu'une saisie est conforme à un motif, éventuellement transformer ou éliminer certains caractères automatiquement, etc, pas exactement la même chose, mais peut-être au final formater la saisie.

    Déjà il faudrait savoir ce que tu manipules exactement (selon ce que tu peux manipuler, il y a différentes façons de traiter le problème (on peut même intervenir sur les caractères au fur et à mesure de la saisie pour empêcher toute saisie interdite, transformer à la volée le point en virgule). Juste pour être sur, c'est bien une application desktop et bien du Java dont il est question (pas une application web, avec du JavaScript). Ou une application desktop avec des hooks en JavaScript (ce qui me semble plus judicieux pour le genre de choses dont il est question) .

    Si tu as a disposition en entrée une chaine de caractères (une String), et que les hooks sont bien en Java, tu peux procéder :

    1. en nettoyant d'abord la saisie, une String donc (mettons String saisie = ...
      • la méthode trim() supprimera les espaces devant et derrière, on ne sait jamais, ce qui évitera que ce défaut mineur de saisie complique le reste de la vérification : saisie = saisie.trim();
      • on peut remplacer le . par une virgule : saisie. = saisie.replace('.',',');, mais ça risque éventuellement de compliquer la vérification ensuite
    2. puis en vérifiant que c'est un nombre décimal à priori dans ton cas
      On peut procéder
      • soit directement sur la String, en utilisant ce qu'on appelle une expression régulière mais ça peut être complexe pour quelqu'un qui ne connait pas
      • le plus simple pour vérifier qu'une String est un nombre, c'est encore de tenter de la transformer en nombre
        • soit avec une méthode de base, mais qui s'applique forcément à un format anglosaxon; d'où ma remarque sur la transformation du point en virgurle. Pour faciliter, il faudrait plutôt faire l'inverse.
          Code : Sélectionner tout - Visualiser dans une fenêtre à part
          1
          2
          3
          4
          5
          6
          7
          8
          9
          10
          String saisie =
          saisie = saisie.trim(); 
          saisie = saisie.replace(',','.'); // pour être sur que la virgule soit un .
          try {
              double nombre = Double.parseDouble( saisie );
              // c'est bien un nombre
              saisie = NumberFormat.getInstance().format(nombre); // on le transforme en string selon le format par défaut de la locale par défaut
          } catch(NumberFormat e) {
              // erreur ce n'est pas un nombre : afficher le message d'erreur ici
          }
        • Soit en utilisant un NumberFormat ou un DecimalFormat (voir ci-après pour le détail), avec sa méthode parse() qui transforme une String en nombre (en fonction de la locale qu'on désire)

    3. puis en le formatant pour retrouver une String
      C'est ici qu'on peut utiliser un NumberFormat, ou un DecimalFormat (qui permet d'indiquer le motif exact que l'on veut).
      • Il y a un tutoriel sur NumberFormat ici
      • Pour formater avec un DecimalFormat, il suffit d'indiquer le format "en anglais" :
        Code : Sélectionner tout - Visualiser dans une fenêtre à part
        1
        2
        DecimalFormat format = new DecimalFormat("#,##0.00");
        String string = format.format(nombre);
        • le séparateur de décimales est le .
        • le séparateur de milliers est la virgule
        • le # signifie une position optionnelle
        • le 0 signifie qu'un 0 sera toujours affiché
        • On ne peut alterner 0 et # avant le . ("0#,##0.00" interdit)

        Code : Sélectionner tout - Visualiser dans une fenêtre à part
        1
        2
        3
        4
        5
        6
        double d=1.0;
        System.out.println(new DecimalFormat("#,##0.00").format(d));
        System.out.println(new DecimalFormat("##,##0.##").format(d));
        System.out.println(new DecimalFormat("##,000.00#").format(d));
        System.out.println(new DecimalFormat("#,###.00#").format(d));
        System.out.println(new DecimalFormat("00,000.##").format(d));
        Affiche
        1,00
        1
        001,00
        1,00
        00 001
        avec
        double d=1234.5678;on aurait :
        1*234,57
        1 234,57
        1 234,568
        1 234,568
        01 234,57

      La locale par défaut est utilisée, mais on peut forcer l'utilisation d'une locale :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      	new DecimalFormat("#,##0.00",DecimalFormatSymbols.getInstance(Locale.FRENCH));
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    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
    Nouveau Candidat au Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Mars 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2017
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Bonjour et merci pour votre réponse très détaillée.

    Malheureusement, rien ne fonctionne...
    Alors je me demande si c'est bien du Java qu'il y a dans ce formulaire...
    J'ai un petit exemple ici :

    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
    function isNumeric(value) {
        return !isNaN(value) && parseInt(Number(value));
    }
     
    var taille = Taille.Value;
    var poids = Poids.Value;
     
     
    if (!isNumeric(taille)||!isNumeric(poids))
    {
        alert('Attention, bien introduire un nombre valide!');
    } else {
        var imc = poids * 10000 / (taille*taille);
        var imctxt = 'Votre IMC = ' + Math.round(imc*100)/100;
        IMC.Value = imc.toFixed(2);
    }
    Cette fonction affiche une erreur si poids et taille ne sont pas numériques. En copiant le début, j'ai bien une alerte si je n'entre pas un nombre valide dans mes champs Poids et Taille également.
    Mais ça ne fonctionne qu'avec un point en séparateur de décimales, et moi je voudrais imposer une virgule...

    Merci.

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Non, ce n'est pas du Java, mais à priori du JavaScript. Donc aucun rapport. Je déplace ta question sur le forum JavaScript.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    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.

  5. #5
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 658
    Points
    66 658
    Billets dans le blog
    1
    Par défaut
    En javascript tu peux faire un test !isNaN
    ou tester la saisie contre une expression régulière ...
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

Discussions similaires

  1. [WD-2007] Formulaire : Format de Nombre dans un champ texte
    Par Escandil dans le forum Word
    Réponses: 4
    Dernier message: 06/11/2012, 13h27
  2. Récupérer un nombre dans un champs texte
    Par mandou36 dans le forum Access
    Réponses: 18
    Dernier message: 05/09/2006, 19h11
  3. [VB6]Format de nombres dans un DataGrid
    Par badrel dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 27/04/2006, 13h53
  4. Formater un nombre dans controle Source
    Par NicoNGRI dans le forum IHM
    Réponses: 4
    Dernier message: 16/12/2005, 14h33
  5. Insertion d'un nombre dans un champs varchar ?
    Par Tchinkatchuk dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 07/04/2005, 15h17

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