problème de séparateur décimal

Librairie C++ de calcul formel/ C++ symbolic computation library

Modérateur : xcasadmin

cdeval
Messages : 192
Inscription : mer. juin 03, 2009 4:28 pm

problème de séparateur décimal

Message par cdeval » sam. sept. 25, 2010 8:34 am

Salut Bernard,

je viens de détecter un comportement bizarre dans OOo et je ne sais pas si c'est lié à giac ou à OOo.

quand je renvoie dans une cellule un nombre du style 1.8-i je le renvoie comme chaine de caractères.
Mais je ne veux pas renvoyer 1,8-i car ce nombre pourrait être réutilisé comme entrée d'une autre formule et la virgule ne serait pas interprétée comme séparateur décimal par giac. Donc je veux absolument que ma chaine garde le point renvoyé par giac.

Curieusement le code :

Code : Tout sélectionner

	gen f(string("1.8-i"),contextptr);
	static std::string es;
	es=f.print(contextptr);
	OString oes=es.c_str();
	OUString resultat=OUString::createFromAscii(oes);
me renvoie 1,8-i quand j'ouvre un document OOo avec une cellule contenant ce nombre.
Si j'attends quelques secondes et que j'actualise la cellule, OOo affiche bien 1.8-i
J'ai donc cru à un bug OOo mais si je change le code :

Code : Tout sélectionner

	static std::string es;
	es="1.8-i";
	OString oes=es.c_str();
	OUString resultat=OUString::createFromAscii(oes);
le problème ne se produit jamais.
Est-ce que f.print(contextptr) tiendrait compte d'une localisation quelconque ?
J'ai changé le séparateur décimal dans OOo pour le point mais j'ai toujours une virgule qui apparaît à l'ouverture du document.

Je ne sais pas trop quoi faire là....
A+

cdeval
Messages : 192
Inscription : mer. juin 03, 2009 4:28 pm

Re: problème de séparateur décimal

Message par cdeval » sam. sept. 25, 2010 10:54 am

précision : testé avec ma version windows, le problème n'apparaît pas !

parisse
Messages : 5743
Inscription : mar. déc. 20, 2005 4:02 pm
Contact :

Re: problème de séparateur décimal

Message par parisse » sam. sept. 25, 2010 12:12 pm

c'est possible que ce soit du à la locale, Le man de sprintf dit
For some numeric conversions a radix character ("decimal point") or
thousands’ grouping character is used. The actual character used
depends on the LC_NUMERIC part of the locale.
Il faudra sans doute que je rajoute dans print_DOUBLE_ (gen.cc) un changement de locale vers "POSIX" comme dans chartab2gen.

cdeval
Messages : 192
Inscription : mer. juin 03, 2009 4:28 pm

Re: problème de séparateur décimal

Message par cdeval » sam. sept. 25, 2010 12:54 pm

Bien vu !
J'ai ajouté un :

Code : Tout sélectionner

setlocale(LC_NUMERIC, "POSIX");
et tout est rentré dans l'ordre :D !
Merci et bon week-end.

Répondre