PDA

View Full Version : [c] formato double


cipi
12-07-2004, 12:15
Ciao hw-dipendenti,
ho un problema che mi si ripresenta spesso... Lavoro in C e compilo con gcc di cygwin: ho il problema che mi ritrovo a smanettare con double che hanno come separatore decimale la virgola e quindi non leggibi con fprintf(f1,"%f"...)
C'è qualcosa che posso impostare all'inizio del mio file in C che gli faccia capire qual'è lo standard dei double sull'attuale s.o.?
cipi

cipi
12-07-2004, 12:31
Per il momento ho risolto così ma vorrei vedere se si può fare richiamando dei parametri di winzoz...

for(j=0;j<=strlen(sVariables[i]);j++)
{
ch=sVariables[i][j];
if(ch==',') sVariables[i][j]='.';
}
dblVariables[j]=atof(sVariables[i]);

dove sVariables è un array di stringhe, dblVariables è un array di float e ch, ovviamente, è un char....
Attendo vostre nuove!
cipi :)

RAISE
12-07-2004, 13:53
la funzione strchr ricerca un carattere in una stringa e restituisce il puntatore a quel carattere
puoi provare una cosa del tipo *strchr(stringa,',')='.'
magari inserisci anche
# define converti(AA,BB) *strchr(AA,',')='.'; bb=atof(AA);
... o qualcosa di simile ....così la puoi utilizzare meglio

ilsensine
12-07-2004, 14:08
#include <locale.h>

setlocale(LC_ALL, "it_IT");


Questo sotto linux richiede i pacchetti di localizzazione "locales" e "locales-it"; non ho idea di come è implementato sotto windows/cygwin.

cipi
12-07-2004, 15:28
Originariamente inviato da RAISE
la funzione strchr ricerca un carattere in una stringa e restituisce il puntatore a quel carattere
puoi provare una cosa del tipo *strchr(stringa,',')='.'
magari inserisci anche
# define converti(AA,BB) *strchr(AA,',')='.'; bb=atof(AA);
... o qualcosa di simile ....così la puoi utilizzare meglio
Grazie... ma il prblema rimane.... anche come ho scritto io funziona... era solo la curiosità di andare a pescare qualcosa come suggerisce ilsensine...l

cipi
12-07-2004, 15:31
Originariamente inviato da ilsensine
#include <locale.h>

setlocale(LC_ALL, "it_IT");


Questo sotto linux richiede i pacchetti di localizzazione "locales" e "locales-it"; non ho idea di come è implementato sotto windows/cygwin.
Grazie ilsensine, ora provo e poi posto... magari torna utile ad altri!

cipi
12-07-2004, 15:51
Originariamente inviato da RAISE
la funzione strchr ricerca un carattere in una stringa e restituisce il puntatore a quel carattere
puoi provare una cosa del tipo *strchr(stringa,',')='.'
magari inserisci anche
# define converti(AA,BB) *strchr(AA,',')='.'; bb=atof(AA);
... o qualcosa di simile ....così la puoi utilizzare meglio
però devo dire che è carino quel define... ;)

cipi
13-07-2004, 10:27
Originariamente inviato da cipi
Grazie ilsensine, ora provo e poi posto... magari torna utile ad altri!
Ho provato di tutto... ho fin aggiornato gcc (gcc version 3.3.1 (cygming special)) e in fase di compilazione non mi da problemi ma se scrivo

setlocale(LC_ALL, "it_IT.ISO-8859-1");
printf(setlocale(LC_ALL,""));

mi risponde sempre C (che è quello preimpostato, no?)
Ora, qualcuno ha qualche idea?

ilsensine
13-07-2004, 10:57
Le libc caricano le definizioni dei "locale" da un database apposito. Sotto linux questo database è composto da uno o più pacchetti che vengono installati in fase di installazione del sistema operativo.

Prova a rieseguire il setup di cygwin, e a cercare e installare eventuali pacchetti il cui nome inizia con "locale".

Nota infine che per richiedere il locale corrente, devi chiamare setlocale(..., NULL), non setlocale(..., "").

cipi
13-07-2004, 11:49
Originariamente inviato da ilsensine
Le libc caricano le definizioni dei "locale" da un database apposito. Sotto linux questo database è composto da uno o più pacchetti che vengono installati in fase di installazione del sistema operativo.

Prova a rieseguire il setup di cygwin, e a cercare e installare eventuali pacchetti il cui nome inizia con "locale".

Nota infine che per richiedere il locale corrente, devi chiamare setlocale(..., NULL), non setlocale(..., "").
Ho tutti i pacchetti installati... ho sistemato l'errore, grazie... ma niente! :cry:
Pazienza.... ;) :rolleyes: :(

a2000
13-07-2004, 15:02
Originariamente inviato da cipi
Ciao hw-dipendenti,
ho un problema che mi si ripresenta spesso... Lavoro in C e compilo con gcc di cygwin: ho il problema che mi ritrovo a smanettare con double che hanno come separatore decimale la virgola e quindi non leggibi con fprintf(f1,"%f"...)
C'è qualcosa che posso impostare all'inizio del mio file in C che gli faccia capire qual'è lo standard dei double sull'attuale s.o.?
cipi

la virgola come separatore decimale è morta.
pace all'anima sua.

sopravvive solo in pochi esemplari in deriva genetica (i.e. trombano tra parenti) in qualche provincia sperduta e culturalmente arretrata.

anzi l'uso della sgorbia come separatore decimale può essere usato come test di sottosviluppo. :D


ma anche quando era viva non costituiva (e non costistuisce) comunque problema in contesti civilizzati. :D :cool:

P.S.
punto solo punto: in basso come separatore decimale, in alto come separatore di migliaia.

ilsensine
13-07-2004, 15:04
Originariamente inviato da a2000
P.S.
punto solo punto: in basso come separatore decimale, in alto come separatore di migliaia.
mmm ok, ma non trovo sulla tastiera il punto in alto :D

cipi
13-07-2004, 15:05
Originariamente inviato da a2000
la virgola come separatore decimale è morta.
pace all'anima sua.

sopravvive solo in pochi esemplari in deriva genetica (i.e. trombano tra parenti) in qualche provincia sperduta e culturalmente arretrata.

anzi l'uso della sgorbia come separatore decimale può essere usato come test di sottosviluppo. :D


ma anche quando era viva non costituiva (e non costistuisce) comunque problema in contesti civilizzati. :D :cool:

P.S.
punto solo punto: in basso come separatore decimale, in alto come separatore di migliaia.
Fosse vero.... Sarebbe morto anche winzoz... Purtroppo, pur d'accordo con te, si è costretti a creare programmi flessibili... E per me questo rappresenta lo sforzo più grande :(

a2000
13-07-2004, 15:23
Originariamente inviato da ilsensine
mmm ok, ma non trovo sulla tastiera il punto in alto :D

è infatti c'hai la tastiera arretrata .... :p

ilsensine
13-07-2004, 15:24
Originariamente inviato da a2000
è infatti c'hai la tastiera arretrata .... arretrato ! :p
No basta girarla al contrario :fuck:

a2000
13-07-2004, 15:27
comunque dovresti sapere, ammesso che tu faccia un minimo di calcolo scientifico (?) , che i numeri si scrivono sempre con mantissa ed esponente. :)

a2000
13-07-2004, 15:29
vai tranquillo solo punto.

il resto è provincia. :D

cipi
13-07-2004, 18:40
Originariamente inviato da cipi
Ciao hw-dipendenti,
ho un problema che mi si ripresenta spesso... Lavoro in C e compilo con gcc di cygwin: ho il problema che mi ritrovo a smanettare con double che hanno come separatore decimale la virgola e quindi non leggibi con fprintf(f1,"%f"...)
C'è qualcosa che posso impostare all'inizio del mio file in C che gli faccia capire qual'è lo standard dei double sull'attuale s.o.?
cipi
Fan***o il gcc di cygwin... sono passato a MinGW... Mejo, molto mejo!

cipi
13-07-2004, 18:44
La risposta di prima era la n. 17 e così.... ecco la risposta 18
:tie: :sperem: :D :D :D