2 Agosto 2011

Mail di risposta da
Matteo Ceccarello

Ho risolto il problema :-D

Non è un bug di slsc, ma un problema di "locale". Dopo essermi letto il
codice del programma (gran cosa i programmi open source!) ho visto che per
scrivere su file usa la funzione fprintf(), che stampa delle stringhe
formattate nella maniera che gli viene indicata. Il problema è che quando
deve stampare un numero decimale, lo fa secondo il locale del sistema, che
nel nostro caso è quello italiano!

Nel locale italiano il separatore dei decimali è la virgola, mentre per
quello anglosassone (per il quale è stato scritto il programma) il
separatore è il punto! Da qui si origina la confusione.

Infatti se da terminale da il comando `locale` dovrebbe ottenere una cosa
simile

matteo@matteo-laptop ~ % locale
> > LANG=it_IT.UTF-8
> > LC_CTYPE="it_IT.UTF-8"
> > LC_NUMERIC="it_IT.UTF-8"
> > LC_TIME="it_IT.UTF-8"
> > LC_COLLATE="it_IT.UTF-8"
> > LC_MONETARY="it_IT.UTF-8"
> > LC_MESSAGES="it_IT.UTF-8"
> > LC_PAPER="it_IT.UTF-8"
> > LC_NAME="it_IT.UTF-8"
> > LC_ADDRESS="it_IT.UTF-8"
> > LC_TELEPHONE="it_IT.UTF-8"
> > LC_MEASUREMENT="it_IT.UTF-8"
> > LC_IDENTIFICATION="it_IT.UTF-8"
> > LC_ALL=
> >

Come vede la riga LC_NUMERIC è impostata a it_IT.UTF-8, che significa che
come separatore dei decimali viene usato la virgola e non il punto.

La soluzione a questo punto è molto semplice, basta dare da terminale
(essendo una variabile di sistema)

export LC_NUMERIC=C
> >

per impostarlo al default di C, cioè col punto come separatore.

Per evitare di digitare il comando ogni volta che si apre un nuovo
terminale, basta aggiungerlo nel proprio file .bashrc :-)

Per me ha funzionato, spero che funzioni anche a lei e che non influisca il
comportamento di altri programmi, in caso mi faccia sapere :-)

Buonanotte

Matteo




