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 :

Traitement nombres et séparateur milliers - Â


Sujet :

JavaScript

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Mars 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Paramétreur de progiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2014
    Messages : 16
    Points : 9
    Points
    9
    Par défaut Traitement nombres et séparateur milliers - Â
    Bonjour à tous,

    je suis confronté au problème suivant :
    j'ai un code dont l'un des objectifs est de traiter une table de valeur (input dont je ne maitrise pas le format).
    cette table pourra se présenter comme ça :
    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
    var Table = { "Data": [
        {
          "Values": [
            {
              "Value": "2 526,1",
              "Time": "07/05/2018 11:13:37"
            },
            {
              "Value": "2 492,8",
              "Time": "07/05/2018 11:13:55"
            },
            {
              "Value": "2 562,1",
              "Time": "07/05/2018 11:14:14"
            }      ],
          "StartTime": "07/05/2018 11:13:26",
          "EndTime": "07/05/2018 15:13:26",
          "Label": "TEST",
          "Path": "TEST",
          "Units": "T"
        }, ]}
    Ensuite, je dois traiter les objets 'Value' et c'est là que ça coince...
    Il faut que je convertisse le string en un nombre exploitable -> autrement dit que je supprime l'espace..

    J'ai tenté .replace(/\s/g, '') mais ça ne suffit pas car pour une raison qui m'échappe le string est interprété tel quel :
    2 526,1 -> 2Â 526,1
    donc j'arrive à le transformer en 2Â526,1 mais ensuite plus possible de me débarrasser du Â...

    En plus j'ai l'impression de ne pas traiter le problème, je ne comprends pas d'où sort le  ??
    pourriez-vous m'éclairer là dessus ?

    Merci

  2. #2
    Membre éclairé
    Avatar de Paleo
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2013
    Messages : 242
    Points : 661
    Points
    661
    Par défaut
    C'est probablement un problème d'encodage, il faudrait vérifier que l'entrée est bien traitée comme de l'UTF-16 (car les chaines de caractères JS sont en UTF16). L'espace qui sépare les nombres est peut-être un autre caractère que l'espace classique : un espace insécable ou une espace fine.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Mars 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Paramétreur de progiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2014
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    Merci pour ta réponse

    et est-ce qu'il y a moyen de forcer l'encodage d'une variable (chaine) ?

  4. #4
    Expert confirmé Avatar de psychadelic
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2 529
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 529
    Points : 4 740
    Points
    4 740
    Par défaut
    ton string marque la décimale avec une virgule, or il faut que ce soit un point pour que JavaScript puisse le " transformer en valeur numérique
    Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        var N_virgule =  "123,4";
        var N_Point   =  "123.4";
     
       console.log( parseFloat(N_virgule) +1 ); // = 124
       console.log( parseFloat(N_Point) +1 );   // = 124.4
    «La pluralité des voix n'est pas une preuve, pour les vérités malaisées à découvrir, tant il est bien plus vraisemblable qu'un homme seul les ait rencontrées que tout un peuple.» [ René Descartes ] - Discours de la méthode

  5. #5
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    Bonjour,
    il faut également prendre ne compte les espaces insécables ce qui donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    // transforme la virgule en point
    valeur = valeur.replace(",",".");
    // traite les espaces
    valeur= valeur.replace(/[\s\uFEFF\xA0]/g, "");

  6. #6
    Membre éclairé
    Avatar de Paleo
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2013
    Messages : 242
    Points : 661
    Points
    661
    Par défaut
    Ou encore, pour virer tous les caractères autres que les chiffres et la virgule :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    val.replace(/[^0-9,]/g, "");

  7. #7
    Expert confirmé Avatar de psychadelic
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2 529
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 529
    Points : 4 740
    Points
    4 740
    Par défaut
    @ Paleo : pas mal l'idée de passer par l’exclusion

    donc si je résume :
    Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var X_StrNumFR =  "2 526,1";
     
    var X_Float_js  = parseFloat( X_StrNumFR.replace(',','.').replace(/[^0-9.]/g, '') );
     
    console.log( X_Float_js + 1 ); // 2527.1

    mais comme ça fait un peu lourd, je suggère l'utilisation d'un wrapper
    Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    /* --- wrapper "Str2Float" --- */
    if (!String.prototype.Str2Float) {
      String.prototype.Str2Float = function () {
        return parseFloat( this.replace(',','.').replace(/[^0-9.]/g, '') );
      };
    }
     
     
    var X_StrNumFR =  "2 526,1";
     
    console.log( X_StrNumFR.Str2Float() +10 );  // 2536.1
    «La pluralité des voix n'est pas une preuve, pour les vérités malaisées à découvrir, tant il est bien plus vraisemblable qu'un homme seul les ait rencontrées que tout un peuple.» [ René Descartes ] - Discours de la méthode

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Mars 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Paramétreur de progiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2014
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    Merci à tous,
    la combinaison de toutes vos réponses (que psychadelic a résumé dans un wrapper) fonctionne à merveille

    Merci beaucoup à vous

  9. #9
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 093
    Points : 6 754
    Points
    6 754
    Par défaut
    Bonjour !

    Juste à titre d’information, la séquence "Â " correspond à l’espace insécable U+00A0 quand elle est encodée en UTF-8 mais interprétée dans un encodage basé sur l’ASCII, comme ISO-8859 par exemple. Les octets qui apparaissent ont pour valeurs C2 et A0, respectivement.

    On peut « réencoder » une chaîne en UTF-8, en tirant parti du défaut des vieilles fonctions escape / unescape qui ne savent pas gérer l’UTF-8, en combinaison avec le couple encodeURIComponent / decodeURIComponent :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var str = "\xC2\xA0"; // "Â "
    var escapedStr = escape(str); // "%C2%A0"
    var decodedStr = decodeURIComponent(escapedStr); // " " (espace insécable)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function ASCIItoUTF8(str) {
      return decodeURIComponent(escape(str));
    }
     
    function UTF8toASCII(str) {
      return unescape(encodeURIComponent(str));
    }
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

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

Discussions similaires

  1. nombres avec séparateur milliers
    Par baddevil dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 19/03/2013, 21h07
  2. [MySQL] nombres avec séparateur millier
    Par baddevil dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 19/03/2013, 18h56
  3. Problème décimal & séparateur millier
    Par remyjoan dans le forum Administration-Migration
    Réponses: 5
    Dernier message: 29/11/2007, 17h10
  4. Réponses: 2
    Dernier message: 13/10/2006, 00h52
  5. Format des nombres entiers, séparateurs de milliers
    Par zazaraignée dans le forum Langage
    Réponses: 2
    Dernier message: 26/10/2005, 01h25

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