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

C# Discussion :

données numériques quelque soit la culture


Sujet :

C#

  1. #1
    En attente de confirmation mail
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2009
    Messages : 338
    Points : 366
    Points
    366
    Par défaut données numériques quelque soit la culture
    Bonjour,
    J'ai un TextBox où on doit saisir une valeur décimale puis je récupère cette valeur via float.parse(textbox1.text).
    Le problème est que cela doit fonctionner quelque soit le séparateur décimal
    Sur ma machine si je met 2.5 dans textbox1, ce code explose :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    float mavaleur = float.Parse(textbox1.Text);
    Comment je peux faire ?

  2. #2
    Membre averti
    Homme Profil pro
    Développeur
    Inscrit en
    Septembre 2007
    Messages
    497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 497
    Points : 330
    Points
    330
    Par défaut
    Perso je viens d'avoir le meme soucis.
    J'ai biaise avec un try catch et un string.replace(',','.')

    Apriori il faudrait utiliser un cultureinvariant mais j'ai pas eu le temps de creuser.

  3. #3
    En attente de confirmation mail
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2009
    Messages : 338
    Points : 366
    Points
    366
    Par défaut
    Ben oui j'ai trouvé des choses comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    // Gets a NumberFormatInfo associated with the en-US culture.
          NumberFormatInfo nfi = new CultureInfo( "en-US", false ).NumberFormat;
     
          // Displays a value with the default separator (".").
          Int64 myInt = 123456789;
          Console.WriteLine( myInt.ToString( "N", nfi ) );
    En gros on ne peut pas faire d'application international, faut choisir son pays ! c'est fou ça !

  4. #4
    En attente de confirmation mail
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2009
    Messages : 338
    Points : 366
    Points
    366
    Par défaut
    J'ai créé cette fonction déjà à l'époque de mes sources VB6 que j'ai remis en C# et là je pensais que .NET aurait qql chose de mieux :
    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
    Double GetNumber(String Nombre)
            {
                if (Nombre.Trim()=="") 
                {
                    return 0;
                }
                int i = Nombre.LastIndexOf(".");
                int j = Nombre.LastIndexOf(",");
     
                if (j>i) {
                    i=j;
                }
     
                int lD=0;
                if (i>0) {
                    lD= Convert.ToInt32(Nombre.Substring(i+1));
                    Nombre=Nombre.Substring(0,i);
                }
     
                String strTmp="";
                String charTmp = "";
     
                for (i = 0; i <= Nombre.Length-1; i++)
                {
                    charTmp=Nombre.Substring(i,1);
                    if (ASC(charTmp)>=48 & ASC(charTmp)<=57) {
                        strTmp = strTmp + charTmp;
                    } 
                    else if(charTmp == "+" | charTmp == "-")
                    {
                        //Le signe...
                        strTmp = strTmp + charTmp;
                    }
                    else if(charTmp == " " | charTmp == "." | charTmp == ",")
                    {
                    }
                }
     
                if (strTmp == "") strTmp = "0";
                //On récupère le séparateur qui est utilisé sur la station de travail
                string SeparateurDecimal = Application.CurrentCulture.NumberFormat.NumberDecimalSeparator;
                return Double.Parse(Convert.ToInt32(strTmp) + SeparateurDecimal + lD);
            }
     
     
    int ASC(String newchar)
            {
                return Convert.ToInt32(Encoding.ASCII.GetBytes(newchar)[0]);
     
            }
    L'utilisation est du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    float mavaleur = (float)GetNumber(textbox1.text);

  5. #5
    En attente de confirmation mail
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2009
    Messages : 338
    Points : 366
    Points
    366
    Par défaut
    Il y a peut être quelque chose à creuser ici : http://www.west-wind.com/weblog/posts/796725.aspx

  6. #6
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 177
    Points : 25 125
    Points
    25 125
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.TextBox1.Text.Replace(",", My.Application.Culture.NumberFormat.NumberDecimalSeparator).Replace(".", My.Application.Culture.NumberFormat.NumberDecimalSeparator)
    si c'est pour être utiliser souvent, faire une fonction d'extension ToSingle sur string par exemple (attribut system.runtime.compilerservices.extension)

  7. #7
    Membre confirmé Avatar de MetalGeek
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 412
    Points : 513
    Points
    513
    Par défaut
    Salut,

    et avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var toto = float.Parse(textBox.Text, CultureInfo.CurrentUICulture.NumberFormat);
    ?

Discussions similaires

  1. Rappatriement de données numériques
    Par manoun1 dans le forum Access
    Réponses: 3
    Dernier message: 20/01/2006, 18h10
  2. Réponses: 4
    Dernier message: 18/01/2006, 17h04
  3. Format de données numériques dans une requête
    Par Aurèl90 dans le forum Access
    Réponses: 1
    Dernier message: 16/11/2005, 10h40
  4. Etirer le bacground quelque soit la résolution de l'écran
    Par hikosaijuro dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 07/09/2005, 14h39
  5. Réponses: 2
    Dernier message: 05/08/2005, 09h21

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