Page 1 sur 1

problème de séparateur décimal

Publié : sam. sept. 25, 2010 8:34 am
par cdeval
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+

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

Publié : sam. sept. 25, 2010 10:54 am
par cdeval
précision : testé avec ma version windows, le problème n'apparaît pas !

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

Publié : sam. sept. 25, 2010 12:12 pm
par parisse
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.

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

Publié : sam. sept. 25, 2010 12:54 pm
par cdeval
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.