Page 1 sur 1
problème conversion _DOUBLE_ vers string
Publié : dim. avr. 29, 2012 2:29 pm
par loic
Bonjour,
Je viens de me pencher sur un problème d'affichage des _DOUBLE_.
Systématiquement, j'ai un ".0" redondant à l'affichage.
Par exemple, lorsque je tape:
Concrètement, dans mon programme:
Code : Tout sélectionner
answer=protecteval(gen("evalf(pi)",context),25,context);
cout <<answer.print(context)<<cendl;
je retrouve ce 3.14159265359.0
Une petite idée? (peut-être une mauvaise initialisation de certains paramètres giac, style langue etc...)
Re: problème conversion _DOUBLE_ vers string
Publié : dim. avr. 29, 2012 2:58 pm
par parisse
je me demande si ça ne vient pas de la virgule comme séparateur décimal, parce que je teste de mon coté que la réponse de la libc pour l'affichage d'un double contient un séparateur décimal afin d'ajouter un . lorsqu'on a un double qui est égal à un entier (toujours le . pour moi comme dans tous les softs scientifiques), du coup une virgule n'est pas considérée comme un .
Donc c'est dans le format d'affichage pour la libc qu'il faut changer quelque chose (mais quoi??).
Re: problème conversion _DOUBLE_ vers string
Publié : mer. mai 09, 2012 5:10 pm
par loic
Re: problème conversion _DOUBLE_ vers string
Publié : mer. mai 09, 2012 6:48 pm
par parisse
en fait, je le fais dans gen.cc mais pour la lecture seulement car c'est assez lourd:
Code : Tout sélectionner
#ifdef HAVE_LIBPTHREAD
int locked=pthread_mutex_trylock(&locale_mutex);
if (!locked){
char * lc=setlocale(LC_NUMERIC,0);
setlocale(LC_NUMERIC,"POSIX");
d=strtod(s,&endchar);
setlocale(LC_NUMERIC,lc);
pthread_mutex_unlock(&locale_mutex);
}
else
d=strtod(s,&endchar);
#else
char * lc=setlocale(LC_NUMERIC,0);
setlocale(LC_NUMERIC,"POSIX");
d=strtod(s,&endchar);
setlocale(LC_NUMERIC,lc);
#endif
On pourrait le faire aussi en écriture, il faut juste tester pour voir si ça n'a pas d'effet de bord.
Re: problème conversion _DOUBLE_ vers string
Publié : jeu. mai 10, 2012 1:50 pm
par loic
Une petite remarque qui peut aider, j'espère:
Avec: language(1,context):
Avec: language(0,context):
Qu'en pensez-vous?
Re: problème conversion _DOUBLE_ vers string
Publié : jeu. mai 10, 2012 2:15 pm
par loic
Bon alors là, je comprends plus. Ne pas faire attention aux messages précédents.
Je n'arrive plus à reproduire le cas ou cela fonctionne avec 0.6 pour réponse....
ça doit être encore plus compliqué....
Re: problème conversion _DOUBLE_ vers string
Publié : ven. mai 11, 2012 10:50 am
par parisse
Bon, plutot qu'un gros changement, je vais faire l'ajustement suivant dans gen.cc, ligne 9315:
Re: problème conversion _DOUBLE_ vers string
Publié : mer. mai 16, 2012 2:07 pm
par loic
Avec ce changement, le séparateur décimal devient chez moi la virgule ce qui pose problème dans les listes ou vecteurs.
Ex:
on croit alors qu'il y 3 éléments au lieu de deux...
Re: problème conversion _DOUBLE_ vers string
Publié : mer. mai 16, 2012 2:19 pm
par parisse
Je pense que le mieux ce serait de mettre votre programme en mode locale C, en mettant au début de main
setlocale(LC_NUMERIC,"POSIX");
(inclure au début du fichier #include <locale.h>).
Re: problème conversion _DOUBLE_ vers string
Publié : mer. mai 16, 2012 7:44 pm
par loic
Je ne sais pas ce que fait cette instruction mais après un test rapide, il semble que cela fonctionne.
10^3 mercis
