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++Builder Discussion :

Problème de virgule et de point


Sujet :

C++Builder

  1. #1
    Membre régulier
    Profil pro
    Concepteur traitement de signal
    Inscrit en
    Août 2004
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Concepteur traitement de signal
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2004
    Messages : 192
    Points : 106
    Points
    106
    Par défaut Problème de virgule et de point
    Re-bonjour

    J'ai un souci dont je viens de m'apercevoir avec mon prog...

    Voilà, j'ai une base de données que j'affiche dans une DBGrid. J'ai un bouton modifier qui me perts de modifier la valeur des champs de la ligne en question. Parmis ces champs, j'ai des nombres que j'affiche dans une TEdit lorsque je veux les modifier.

    Le problème, c'est que ces nombres apparaissent avec des virgules "," dans DBGrid, et me sont affichés également avec une virgule dans ma TEdit. Or lorsque j'entre un nombre dans une TEdit, le caractère qui marque la décimale n'est pas une virgule "," mais bien un point "." !!

    Du coup, imaginons que j'appuie sur mon bouton modifier, le TEdit m'affiche par exemple "12,3456". Je décide de ne pas changer cette valeur et valide mon changement, et j'ai un beau "12" qui s'affiche dans ma grille comme la lecture s'arrête à la virgule puisque ce n'est pas un caractère reconnu dans le format nombre.

    Je sais pas si j'arrive à me faire comprendre, je peux être plus flou si vous voulez ahahaha

    Merci à vous !

  2. #2
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 401
    Points : 578
    Points
    578
    Par défaut
    Hello,

    Est-ce que tu as essayé de modifier la valeur de DecimalSeparator ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DecimalSeparator = ',';

  3. #3
    Membre régulier
    Profil pro
    Concepteur traitement de signal
    Inscrit en
    Août 2004
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Concepteur traitement de signal
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2004
    Messages : 192
    Points : 106
    Points
    106
    Par défaut
    Heuuu non, c'est justement ce genre de valeur que je cherchais mais je sais pas ou elle se trouve ?
    C'est une valeur de la DBGrid ?
    Sinon je suppose qu'il faudrait que je trouve le moyen de dire à ma base de données PARADOX (oui me semble que j'avais oublié de le préciser...) que le séparateur décimale est un point et pas une virgule mais je sais pas comment faire non plus :S

  4. #4
    Membre actif Avatar de SmileSoft
    Inscrit en
    Mars 2008
    Messages
    436
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 436
    Points : 214
    Points
    214
    Par défaut
    salut
    Citation Envoyé par androz Voir le message
    mais je sais pas ou elle se trouve ?
    C'est une valeur de la DBGrid ?
    help bcb:

    DECIMALSEPARATOR: Caractère utilisé pour séparer la partie décimale et la partie entière d'un nombre (par exemple, une virgule dans 3,14). Valeur par défaut : le séparateur décimal sélectionné pour votre pays dans le Panneau de configuration de Windows (Paramètres régionaux).
    donc tu dois lui affecter le ',' en mettant l'instruction proposée par totoche76 dans le constructeur de la classe mère de ton application.
    Un thésard a souvent un problème de motivation jusqu'au moment où il aura un problème de temps....

  5. #5
    say
    say est déconnecté
    Membre expérimenté
    Avatar de say
    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 176
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 176
    Points : 1 300
    Points
    1 300
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    void __fastcall MyTools::SetDecimalSeparator(const char* separator)
    {
            if( strcmp(separator,",") == 0 || strcmp(separator,".") == 0 )
            {
                long nLocale;
                nLocale = GetUserDefaultLCID();
                SetLocaleInfo(nLocale, LOCALE_SDECIMAL, separator);
            }
    }
    Ils ne savaient pas que c'était impossible alors ils l'ont fait (Mark Twain)
    _ _ _ _ _ _ _ _ _

    La planète ne nous appartient pas, elle nous a été prêtée par nos enfants
    _ _ _ _ _ _ _ _ _

    Technos : Access, C++ Builder, SQL, PostgreSQL, Crystal Reports, XML entre autres

  6. #6
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 401
    Points : 578
    Points
    578
    Par défaut
    Citation Envoyé par androz Voir le message
    Sinon je suppose qu'il faudrait que je trouve le moyen de dire à ma base de données PARADOX (oui me semble que j'avais oublié de le préciser...) que le séparateur décimale est un point et pas une virgule mais je sais pas comment faire non plus :S
    Dans l'administrateur BDE (bdeadmin.exe) ??
    Onglet Configuration -> Système -> Formats -> Number ?

  7. #7
    Membre chevronné Avatar de nirgal76
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2007
    Messages
    905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 905
    Points : 2 129
    Points
    2 129
    Par défaut
    Sous oracle, on fait une requete pour changer le separateur decimal (en fait, accepter les 2, que ce soit le point ou la virgule :

    ALTER SESSION SET NLS_NUMERIC_CHARACTERS='.,'

    C'est peut etre le même genre de chose qu'il faut faire sous paradox mais là, je ne connais pas (plus) ce sgbd, je ne peux pas aider plus que ça.

  8. #8
    Membre à l'essai
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Novembre 2002
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Algérie

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2002
    Messages : 16
    Points : 22
    Points
    22
    Par défaut
    tu pourrais peut être utiliser le gestionnaire OnKeyPress de ta DBGrid, dans le genre si key==',' alors key='.', ça devrait aider à résoudre ton pb, tout du moins la partie saisie si tu saute le TEdit...

  9. #9
    Membre confirmé
    Homme Profil pro
    Consultant technique
    Inscrit en
    Juillet 2002
    Messages
    519
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2002
    Messages : 519
    Points : 523
    Points
    523
    Par défaut
    Tu peux essayer avec l'évènement OnChange de ton TEdit et utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Edit->Text = StringReplace(Edit->Text, ",", ".", TReplaceFlags() << rfReplaceAll);

  10. #10
    Membre régulier
    Profil pro
    Concepteur traitement de signal
    Inscrit en
    Août 2004
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Concepteur traitement de signal
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2004
    Messages : 192
    Points : 106
    Points
    106
    Par défaut
    hey hey

    Un grand merci pour toutes ces réponses !!! vous êtes top !
    Je vais essayer de me dépatouiller avec tout ça, et je vous dirai la solution que j'ai retenue.
    Bien possible que ce soit la solution du sélecteur de décimal défini dans Windows, ça me facilitera la tâche également avec Excel...

  11. #11
    Membre régulier
    Profil pro
    Concepteur traitement de signal
    Inscrit en
    Août 2004
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Concepteur traitement de signal
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2004
    Messages : 192
    Points : 106
    Points
    106
    Par défaut
    Hello

    Bon, dans un premier temps, j'avais opté pour la simplicité en changeant le séparateur de décimale dans mes paramètres régionaux sous Windows, mais ça m'a engendré des soucis avec certaines macros Excel qui récupèrent des données sur internet.... bref j'ai déplacé le problème.

    J'ai donc opté pour la solution de Say et d'utiliser la commande SetLocalInfo. Bien pratique cette petite fonction Un grand merci à tous donc !

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

Discussions similaires

  1. Problème de virgule et/ou point
    Par thierry007 dans le forum VB.NET
    Réponses: 23
    Dernier message: 12/08/2014, 14h10
  2. Problème de virgule
    Par Drax dans le forum Débuter
    Réponses: 12
    Dernier message: 04/12/2005, 14h40
  3. [D7] Problème de virgule flottante
    Par Magnus dans le forum Langage
    Réponses: 17
    Dernier message: 22/09/2005, 14h56
  4. Problème de Regex ... avec un point
    Par bugalood dans le forum Langage
    Réponses: 2
    Dernier message: 29/05/2005, 10h26
  5. [Kylix] Problème de virgule/DBExpress
    Par jeanphy dans le forum EDI
    Réponses: 5
    Dernier message: 12/02/2003, 16h29

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