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 :

Separateur décimale Virgule


Sujet :

C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 11
    Par défaut Separateur décimale Virgule
    Bonjour tout le monde,

    j'ai un petit soucis que je n'arrive pas a resoudre.

    Je genere dans mon code un fichier avec la fonction fprintf, que je met en forme. Dans ce fichier j'ai des montants avec des décimales. A l'exportation tout marche nickel sauf que le separateur est un ".", et j'aurai aimé que ce soit une virgule.

    J'ai regardé la doc des formats de spécifications %02d, %f etc ... mais je n'arrive pas a modifier ce séparateur.
    Dans mes parametres regionnaux de windows pourtant le séparateur est bien la virgule.

    Mon code est de ce style la :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fprintf(Stream,"\"%s\";\"%s\";%d;%f;\n",$str1,$str2,$nb1,$nb2);
    Si quelqu'un a une idée ca m'arrange

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    80
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Mars 2006
    Messages : 80
    Par défaut
    Si tu programme en c++ pourquoi utiliser fprintf? avec un ofstream se sera trés facile

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 11
    Par défaut
    La fonction ofstream a le meme resultat j'ai toujours un point comme séparateur de décimale et non la virgule.
    Le fichier texte est au format csv pour que mon utilisateur puisse l'ouvrir facilement.
    Du coup si je l'ouvre avec excel ma cellule est prise en compte comme du texte et pas un nombre a cause du point.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    80
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Mars 2006
    Messages : 80
    Par défaut
    Citation Envoyé par zalx
    La fonction ofstream a le meme resultat j'ai toujours un point comme séparateur de décimale et non la virgule.
    Le fichier texte est au format csv pour que mon utilisateur puisse l'ouvrir facilement.
    Du coup si je l'ouvre avec excel ma cellule est prise en compte comme du texte et pas un nombre a cause du point.
    Ah je comprend maintenant, en gros si t'a un montant: 10.23 tu veu que dans ton fichier
    ca se transforme en 10,23 au moment de l'écriture.
    une solution simple c'est de stocker (avant l"écriture dans le fichier) ton montant dans un string et remplacer le "." par "," aprés tu pourra le mettre dans ton fichier et tu aura le résultat voulu.
    j'espere que j'ai répondu à ta question.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Août 2005
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 14
    Par défaut
    salut
    la solution dépend tu compilateur que tu utilise
    dans C++Builder de Borland , il existe une variable globale : DecimalSeparator

    tu peux par exemple mettre :
    DecimalSeparator=',';
    au début de ton programme.

  6. #6
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Il faut changer la locale :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #include <fstream>
    #include <locale>
     
    std::ofstream File("toto.txt");
    std::locale loc("");
    File.imbue(loc);
    File << 5.24f; // Ecrit 5,24
    Je ne connais pas le nom des locales, mais chez moi "" semble en donner une qui a la virgule comme séparateur décimal.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 11
    Par défaut
    Je vous remercie pour votre aide.
    Si je stocke ca dans une string sans faire aucune modification ma virgule est bien gardée sauf que je peux pas faire de mise en forme du genre avoir tous les nombres sous forme ##,######, mais bon ca sera ma solution de secours.
    Remplacer tous les . par des , trop contraignant, ya trop de variables et fichiers exportés.

    Par contre la solution de Laurent j'ai pas tout compris, je vais y regarder de plus pret avec msdn.
    Je developpe sous VS 2005.

    Encore merci pour votre aide.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    80
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Mars 2006
    Messages : 80
    Par défaut
    Citation Envoyé par zalx
    Je vous remercie pour votre aide.
    Si je stocke ca dans une string sans faire aucune modification ma virgule est bien gardée sauf que je peux pas faire de mise en forme du genre avoir tous les nombres sous forme ##,######, mais bon ca sera ma solution de secours.
    Remplacer tous les . par des , trop contraignant, ya trop de variables et fichiers exportés.

    Par contre la solution de Laurent j'ai pas tout compris, je vais y regarder de plus pret avec msdn.
    Je developpe sous VS 2005.

    Encore merci pour votre aide.
    Ta raison la solution de laurent et cistamm me semble meilleur que la mienne
    t'a plus qu'a les tester, bon courage .

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 11
    Par défaut
    bon finalement j'ai reussit. j'ai fait une fonction qui met a jour ma string avant l'ecriture dans le fichier, vu que j'avais un probleme de guillemet, j'ai fait les deux en meme temps et ca roule.
    Merci pour votre aide en tout cas, j'hesiterai pas a revenir !

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

Discussions similaires

  1. separateur decimal virgule non reconnu
    Par serge_ dans le forum Développement de jobs
    Réponses: 3
    Dernier message: 16/11/2011, 14h01
  2. Chiffre décimal, virgule et point
    Par _developpeur_ dans le forum VBA Access
    Réponses: 6
    Dernier message: 08/07/2011, 13h16
  3. Separateur a virgule
    Par 'Bruno' dans le forum MATLAB
    Réponses: 6
    Dernier message: 09/12/2009, 20h27
  4. Import fichier csv dans access (séparateur décimal = virgule)
    Par Averroes dans le forum Modélisation
    Réponses: 16
    Dernier message: 16/09/2007, 11h25
  5. [VBExpress2005] Point décimal/virgule dans un masque de saisie
    Par BassBeat dans le forum Windows Forms
    Réponses: 3
    Dernier message: 13/05/2006, 23h57

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