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 :

mon application ne comprend pas le français


Sujet :

C#

  1. #1
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    157
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 157
    Points : 67
    Points
    67
    Par défaut mon application ne comprend pas le français
    salut;
    g realiser une application sous visual c# qui utilise une bdd sql server.
    ds cette application j'utilise un DataReader pour acceder a mes données, normalement le resultat d'une lecture d'un decimale devrait etre du genre "2.55", remarquez bien le point, et c'est éffectivement ce que me sort mon pc, et même le pc d'un amis.
    cepandant cette même instruction sur un autre pc me sort "2,55", remarquez bien il ya une vergule au lieu du point. ceci cause un grave bug ds mon application a cause de la vérgule, que je peut contourner en convertissant le nombre en chaine de caractaire puis faire un replace.

    mais moi je veut connaitre la raison de ces différents résultats, je sais pas peut etre qu'il ya des options regionales a modifier, sachant que mon syst d'exploitation est un xp version anglaise, alors que les autre (ou il ya le probleme de la vergule) sont on un Xp version française.
    ou bien peut etre que le pb n'est pas ça ???!!!!!!!!!!!!

    merci d'avance.

  2. #2
    Membre régulier
    Inscrit en
    Décembre 2007
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 105
    Points : 90
    Points
    90
    Par défaut
    salut

    je te jure que j'ai encore le même problème, je viens de développez une application pour une agence de Transit, ce qui est drole chez moi quand je veux entrer la valeur de devise, mon système m'oblige à introduire un truc comme ça 12.6 ( n'accepte pas la vergule ) quand j'ai installer l'application dans l'entreprise le mêm système n'accpete que des valeurs tel que 12,6 (pour 12.6 il genère une erreur).

    je vais encore chercher et dès que je trouve des nouvelles je te les commuique


  3. #3
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    157
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 157
    Points : 67
    Points
    67
    Par défaut
    merci moi aussi si je trouve quelque chose je te tiendrai au courant,

    mais c comaime bizzar !!!!!!!!!!!!!!!!!!!!!, ça l'est telement que g u du mal a formuler mon probleme.

  4. #4
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    NumberFormatInfo.NumberDecimalSeparator
    La chaine utilisée pour séparer le nombre de ses décimaux est dépendante de la culture actuelle de l'application. Sur un système anglais il s'agit du '.' tandis que pour un système français, c'est la ','.
    Il est donc possible d'obtenir le caractère actuellement utilisé via la propriété cité ci dessus ...

  5. #5
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Tout ceci est normale, c'est la globalization, quelque chose d'assez puissant pour gérer facilement les problèmes liées aux cultures.

    salut;
    g realiser une application sous visual c# qui utilise une bdd sql server.
    ds cette application j'utilise un DataReader pour acceder a mes données, normalement le resultat d'une lecture d'un decimale devrait etre du genre "2.55", remarquez bien le point, et c'est éffectivement ce que me sort mon pc, et même le pc d'un amis.
    cepandant cette même instruction sur un autre pc me sort "2,55", remarquez bien il ya une vergule au lieu du point. ceci cause un grave bug ds mon application a cause de la vérgule, que je peut contourner en convertissant le nombre en chaine de caractaire puis faire un replace.
    La globalization ne s'applique normalement qu'à l'affichage, donc pour les string. Cela ne peut pas provoquer de bug si l'application est bien codé.
    Je n'ai jamais vu une form qui plantais parce que tu affiches 2.55 ou 2,55.
    Maintenant si tu fais des opérations mathématiques sur les nombres, et que tu récupères ces nombres en convertissant des strings en int ou double, ou float, ou ce que tu veux, tu n'auras des problèmes que si tu ne fais pas les tests nécessaire !!!!
    Il faut toujours considérer que l'utilisateur rentre des données invalides pour déterminer les tests à faire avant d'utiliser le nombre.
    Pourquoi faire compliqué lorsque l'on peut faire encore plus compliqué.

  6. #6
    Membre extrêmement actif Avatar de fally
    Homme Profil pro
    Développeur .Net / BI
    Inscrit en
    Novembre 2007
    Messages
    966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur .Net / BI

    Informations forums :
    Inscription : Novembre 2007
    Messages : 966
    Points : 1 173
    Points
    1 173
    Par défaut
    C'est peut etre etrange de trouver une virgule(,) a place d'un point(.) mais de là a ce que l'application bug hum?????
    je pense qu'il faut nous montrer où le code bug

  7. #7
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Forcer la culture lors des conversions avec CultureInfo.

    Ceci dit si l'application bug, dans ce cas, c'est qu'il y a de sérieux problèmes de conception (style convertir en chaine puis reconvertir en numérique derrière).

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                string myUserTypingContent = "123,456"; // "saisie"
                double myValue = double.Parse( myUserTypingContent , CultureInfo.CurrentUICulture );
    A l'inverse, pour forcer l'utilisation du format anglo-saxon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                string myUserTypingContent = "123.456";
                double myValue = double.Parse( myUserTypingContent , CultureInfo.InvariantCulture );
    Pour l'affichage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                double myValue = 123.456;
                string myValueToDisplay = myValue.ToString( CultureInfo.CurrentUICulture );
    forcera l'affichage dans la "culture" de l'os installé

    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                double myValue = 123.456;
                string myValueToDisplay = myValue.ToString( CultureInfo.InvariantCulture);
    va forcer l'affichage avec le "." comme séparateur décimal.

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  8. #8
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    157
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 157
    Points : 67
    Points
    67
    Par défaut
    j'aurai du mieu m'expliquer;
    comme je l'ai dit j'utilise une bdd, a un moment, ds mon application, je fait un datareader pour obtenir un decimal, puis je l'insert apres quelques bricoles ds une autre table, le probleme ne se manifeste pas quand je travaille avec dans le code de l'application car elle reconné le decimale quelque soit sa culture, mais apres les bricoles je doit le reinserer ds la base de donnee grace a une instruction du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    "insert into ligne_fact values("+ Convert.ToString(code) +","+ Convert.ToString(prix) +")";
    le prix etant en vergule l'SGBD me sort une exeption et me dit que g inserer 3 champ ds une table qui n'en contien que 2;

    je vous rapele que g contourner ce probleme, et que je veut juste savoir comment l'eviter au future.

  9. #9
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    157
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 157
    Points : 67
    Points
    67
    Par défaut
    c bon je croi que g compris,
    alors il reste avec le point jusqu'au moment ou je veut l'inserer ds la table,
    la ou je fait Convert.ToString(prix); .c'est béte, c'est au dernier moment qu'il me lache lol;

    merci pour tout les gars;

  10. #10
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par saidgrd Voir le message
    c bon je croi que g compris,
    alors il reste avec le point jusqu'au moment ou je veut l'inserer ds la table,
    la ou je fait Convert.ToString(prix); .c'est béte, c'est au dernier moment qu'il me lache
    On a déjà dit, redit, et répété à satiété que pour ne pas être emmerdé avec les conversions de valeurs (numériques ou dates) dans les requêtes sql, le plus simple est d'utiliser les paramètres. (DbParameters).

    Toute autre façon de procéder suppose de faire une hypothèse forte sur la "culture" utilisée par le serveur SGBD, qui n'est pas forcément identique à celle utilisée par l'application cliente.

    En utilisant les DbParameters, on délègue le problème à ADO.Net qui fait cela très bien.

    Les "ToString" sur les valeurs numériques n'ont pas, en général, vocation à être utilisées pour autre chose que l'affichage.

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

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

Discussions similaires

  1. [Déploiement] Pourquoi mon application ne fonctionne pas sur tous les postes ?
    Par Willthelegend dans le forum Windows Presentation Foundation
    Réponses: 3
    Dernier message: 08/09/2008, 20h34
  2. Réponses: 3
    Dernier message: 09/07/2008, 10h29
  3. Mon application ne démarre pas sur tomcat
    Par dzenakhra dans le forum Tomcat et TomEE
    Réponses: 1
    Dernier message: 12/12/2007, 16h48
  4. Réponses: 1
    Dernier message: 30/08/2006, 19h00
  5. [VS.Net 2005][ClickOnce] Mon application ne démarre pas
    Par Vonotar dans le forum Visual Studio
    Réponses: 3
    Dernier message: 07/12/2005, 14h44

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