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

SL & STL C++ Discussion :

Conversion de double "format scientifique"


Sujet :

SL & STL C++

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    53
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 53
    Points : 34
    Points
    34
    Par défaut Conversion de double "format scientifique"
    Bonjour,

    J'ai une partie de code en c++ qui me créé un fichier xml avec des valeurs numériques.
    Une fois le xml créé je le transforme en html en utilisant des feuilles de styles xsl.
    Dans cette feuille de style je calcul la valeur minimum des différentes valeurs de mon fichiers xml en utilisant la fonction min de EXSLT.
    Mon problème est que dans les valeurs rempli dans le fichier xml je me trouve avec des nombres scientifique du type : 1.22e-11 et la fonction min() de EXSLT ne le reconnai pas comme un nombre et me renvoi Nan( pour Not a Number).

    Dans mon code c++ le nombre en question est un double. Je voudrais savoir si il existe une méthode pour le transformer au format décimal "normal" et ainsi remplir mon xml avec la valeur au bon format.

    Merci.

  2. #2
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par alaparra Voir le message
    Bonjour,

    J'ai une partie de code en c++ qui me créé un fichier xml avec des valeurs numériques.
    Une fois le xml créé je le transforme en html en utilisant des feuilles de styles xsl.
    Dans cette feuille de style je calcul la valeur minimum des différentes valeurs de mon fichiers xml en utilisant la fonction min de EXSLT.
    Mon problème est que dans les valeurs rempli dans le fichier xml je me trouve avec des nombres scientifique du type : 1.22e-11 et la fonction min() de EXSLT ne le reconnai pas comme un nombre et me renvoi Nan( pour Not a Number).

    Dans mon code c++ le nombre en question est un double. Je voudrais savoir si il existe une méthode pour le transformer au format décimal "normal" et ainsi remplir mon xml avec la valeur au bon format.

    Merci.
    bonjour que veut tu dire par format décimal "normal" ?
    sinon, tu utilise quoi pour écrire ton nombre? printf ou les flux ?

    si format décimal "normal" veut dire 0.00000000122
    avec printf tu devrait pouvoir faire (a tester)

    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    char number [256];
    double val =-1.22e-11
    sprintf(number,"%30.15f",val);

    ce qui va ecrit val sur 30 caractère avec 15 chiffre aprés la virgule. Avec les flux je ne sait pas.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    53
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 53
    Points : 34
    Points
    34
    Par défaut
    Par format normal j'entend 0.0000000122.

    En fait je croit que j'avais pas bien cerner le probleme, car ce n'est pas moi qui écrit la valeur dans le fichier xml mais une lib que j'utilise. En gros je passe a la lib une liste de double et elle m'écrit le fichier xml.
    Ce que je voudrais c'est lui passer le double au bon format, mais je suis pas sur que ce soit faisable sans agir sur l'écriture elle même.

  4. #4
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par alaparra Voir le message
    Par format normal j'entend 0.0000000122.

    En fait je croit que j'avais pas bien cerner le probleme, car ce n'est pas moi qui écrit la valeur dans le fichier xml mais une lib que j'utilise. En gros je passe a la lib une liste de double et elle m'écrit le fichier xml.
    Ce que je voudrais c'est lui passer le double au bon format, mais je suis pas sur que ce soit faisable sans agir sur l'écriture elle même.
    Peut être que tu as une option pour l'ecriture? ou avec xsl, y as un forum sur le xml je croit

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    53
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 53
    Points : 34
    Points
    34
    Par défaut
    Merci,
    je vais voir si je ne peut pas agir directement sur ma feuille xsl.

  6. #6
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Points : 1 543
    Points
    1 543
    Par défaut
    Salut,

    Citation Envoyé par alaparra Voir le message
    Ce que je voudrais c'est lui passer le double au bon format, mais je suis pas sur que ce soit faisable sans agir sur l'écriture elle même.
    Au pire tu peux sans doute formater dans une chaînes de caractères et la lui passer au lieu du nombre directement ?

    MAT.

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    53
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 53
    Points : 34
    Points
    34
    Par défaut
    Je ne peut pas utiliser de chaine de caratere, le seul moment ou je peut agir sur la valeur est lors de l'affectation du Double. Ensuite j'ajoute le Double dans une liste que j'utilise grâce à la lib dont j'ai parler pour écrire le fichier resultat au format Xml.

  8. #8
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Points : 1 543
    Points
    1 543
    Par défaut
    Tu écris 'Double', c'est une classe et non le type de base double ?
    Tu ne peux pas mettre des chaînes et non des doubles dans ta liste ?

    MAT.

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    53
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 53
    Points : 34
    Points
    34
    Par défaut
    si, je parle bien tu type standard double et non je ne peut pas utiliser de chaine de caractere.
    Je ne peut pas toucher au code qui écrit le fichier Xml a partir de la liste de double.

  10. #10
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 627
    Points : 30 692
    Points
    30 692
    Par défaut
    Salut,

    Tu peux utiliser certaines instructions de formatage sur les flux SL.

    Il y a une entrée dans la FAQ sur le sujet: http://cpp.developpez.com/faq/cpp/?p...stream_iomanip.

    L'idée est d'inclure le fichier d'en-tête <iomanip> et de travailler comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #include <iomanip> //setprecision, fixed,...
    #incllude <fstream> //std::ofstream
    int main()
    {
        /* notre double */
        double d=1.456987; /* juste pour l'exemple */
        std::ofstream fs("essai.txt"); /* le fichier de sortie */
        fs<<std::setprecision(10) // dix chiffres apres la virgule
          <<std::fixed    //pour une notation non scientifique
          <<"valeur de d "
          << d<<endl;
    }
    Comme tu veux partir sur l'écriture d'un fichier xml, cela pourrait prendre une forme fort proche de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    std::ofstream& maclass::write(std::ofstream& fs)
    {
        fs<<<<std::setprecision(10) // dix chiffres apres la virgule
          <<std::fixed    //pour une notation non scientifique
          <<"<balise name=\""<<name<<"\" value=\""
          << value<<"\" />"<<std::endl;
        return fs;
    }

  11. #11
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Points : 1 543
    Points
    1 543
    Par défaut
    Citation Envoyé par alaparra Voir le message
    Je ne peut pas toucher au code qui écrit le fichier Xml a partir de la liste de double.
    Ca me parait un peu cramé là avec ce postulat, non ?

    MAT.

  12. #12
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 627
    Points : 30 692
    Points
    30 692
    Par défaut
    Citation Envoyé par Mat007 Voir le message
    Ca me parait un peu cramé là avec ce postulat, non ?

    MAT.
    Ouppsss... j'avais pas vu ce postulat ... Tu as raison sur ce coup

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    53
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 53
    Points : 34
    Points
    34
    Par défaut
    Merci pour vos reponses, mais en fait je ne pense pas que ce que je veut faire soit faisable.
    Je me penche plutot sur essayer de modifier la valeur directement dans la feuillse xsl pour que la valeure soit interpretée au bon format dans le fichier html découlant du fichier xml.

  14. #14
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 861
    Points
    11 861
    Par défaut
    Et où est-ce que tu bloques ?
    Parce que tu lis le fichier, et tu remplaces ta valeur tranquillement. Où est le problème ?

  15. #15
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    53
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 53
    Points : 34
    Points
    34
    Par défaut
    J'ai trouvé une solution dont je ne suis pas sur qu'elle convienne( par rapport au cahier des charges de l'appli) qui est de diminuer la précision du chiffre.
    je transforme donc ma valeure 1.22e-11(0.00000000122) en 0.000000 soit la longeur maximal d'un double.

    Et où est-ce que tu bloques ?
    Parce que tu lis le fichier, et tu remplaces ta valeur tranquillement. Où est le problème ?
    En fait le problème vient du fait que dans le fichier html que je créé, à partir du fichier xml créé et d'une feuille xslt, je calcul le minimum des valeurs. Hors 1.22e-11 n'est pas reconnu comme type "number" dans xslt et donc je ne peut pas la comparer avec les autres valeures.

  16. #16
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 861
    Points
    11 861
    Par défaut
    Il suffit de transformer cette valeur en expression "non scientifique" de ce réel.
    Comme il a été dit plus haut.
    Ensuite tu remets ton nombre dans le fichier et c'est bon.

  17. #17
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Points : 1 543
    Points
    1 543
    Par défaut
    Citation Envoyé par alaparra Voir le message
    Hors 1.22e-11 n'est pas reconnu comme type "number" dans xslt et donc je ne peut pas la comparer avec les autres valeures.
    C'est bizarre quand même, tu utilises quoi comme outil/bibliothèque pour effectuer la transformation ?

    MAT.

  18. #18
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par Alp Voir le message
    Il suffit de transformer cette valeur en expression "non scientifique" de ce réel.
    Comme il a été dit plus haut.
    Ensuite tu remets ton nombre dans le fichier et c'est bon.
    T'as peut être pas tout suivie du poste, c'est une lib qui écrit le fichier xml (il n'as pas les source).Puis c'est du xsltpour transformer le xml en html. C'est plus un problème de xslt( puisqu'il n'as pas les source).

    Au pire un pourrai ré écrire le fichier xml en remplacant 1.22e-10 par 0.00000122. Mais je ne trouve pas que c'est une super idée. Enfin cela peut peut être résoudre son problème.

  19. #19
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    53
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 53
    Points : 34
    Points
    34
    Par défaut
    je pense pas que mon problème est une solution du coté code c++ amoins de faire ce que j'ai fait cad diminuer la precision du double.( 1.22e-11 -> 0.000000 ).
    Coté xsl je trouve pas trop de solution non plus pour transformer 1.22e-11 en 0.000000000122. Je vais voir si je peut pas changer le format de mon xml et y integrer directement le minimum comme ca j'aurai juste une recopie a faire pour le html via le xslt.

  20. #20
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Points : 1 543
    Points
    1 543
    Par défaut
    Mais pourtant 1.22e-11 est bien une représentation valide pour un double dans un document XML.
    Quel est le processeur que tu utilises pour effectuer la transformation XSL ? Tu es sûr que le problème ne vient pas de là ?

    MAT.

Discussions similaires

  1. Réponses: 9
    Dernier message: 19/04/2013, 16h46
  2. Conversion string (au format scientifique) en float
    Par Olivié dans le forum Langage
    Réponses: 2
    Dernier message: 18/05/2009, 17h13
  3. Conversion en double et notation scientifique
    Par bert24 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 23/09/2005, 13h26

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