Newsgroup: it.comp.lang.visual-basic
Titolo: [?] Locale e codice

Ho scritto del codice che per qualche motivo (probabilmente qualche mia 
lacuna) non funziona correttamente se si utilizza come separatore 
decimale e delle migliaia il punto o la virgola.
Quel che mi succede e' che il seguente codice:
         iva = 1# + (CDbl(C_aliquota) / 100#)
dove c_aliquota e' un numero frazionario con separatore il punto (come 
si usa in Svizzera, dove e' installato il programma), ad es. 7.6 
(memorizzato in formato testo)
-in Italia, cioe' sul mio pc, impostato con la virgola come separatore 
decimale restituisce 1,76   :-(
-in Svizzera, ovvero sul mio pc impostato con il punto come separatore 
decimale restituisce 1,076  :-)
Qaundo faccio dei test con questo programma devo quindi cambiare le 
impostazioni internazionali nel Pannello di controllo, con la 
conseguenza che alcune proprieta' dei form, in genere size, a causa 
della variazione del separatore decimale danno errori nel caricamento 
del form (nell'IDE) ed anche se non ho fatto alcuna modifica, devo 
salvare il form e cosi' di nuovo quando ripristino le impostazioni italiane.
Ho appena provato ad utilizzare la API setlocaleinfo, ma eseguendo 
nell'ide il programma ottengo comunque questi messaggi non bloccanti 
riguardanti errori nelle proprieta' e successiva richiesta di salvare il 
form ...
C'e' un modo per risolvere questo problemuccio?
grazie
		maxx

decimale restituisce 1,076  :-)
Idem come sopra
Io lavoro abitualmente sia con entrambi i separatori, ma francamente 
non ho capito il problema ...
ciao, hal

 (memorizzato in formato testo)
La CDbl() (come tutte le funzioni di conversione con "C" davanti) utilizzano
le impostazioni internazionali per la conversione.
Il metodo piů "semplice" č con la GetLocaleInfo() (che sembra che tu
conosca) prelevare il separatore decimale. Lo puoi fare all'inizio del
programma in una var pubblica.
Io mi sono fatto una semplicissima funzioncina, non perfetta ma, a meno che
mi mettano come separatori dei simboli come l'asterisco, funziona.
Piů o meno fatta cosě:
Function MyCDbl(Value as String) as double
    ' Separator č il separatore ottenuto con la GetLocaleInfo()
    MyCDBl = CDbl(Replace(Value, ",", Separator))
End Function
Ciao
-- SiDB Simple DataBase engine ---------------------------
 
http://space.virgilio.it/zntf...@tin.it/sidb/sidb.htm
----------------------------------------------------------

 
Il problema e' che iva contiene un valore che dipende dalle impostazioni 
internazionali del separatore decimale.
Credo che la soluzione suggerita da zanna possa andarmi bene, anche se 
dovro' spulciarmi tutto il codice alla ricerca dei cdbl sospetti ;-)
grazie
		maxx

 dovro' spulciarmi tutto il codice alla ricerca dei cdbl sospetti ;-)
ATTENZIONE: la cosa č piuttosto subdola, ma nelle impostazioni
internazionali č d'obbligo che le impostazioni dei separatori Numeri e
Valuta siano le stesse, altrimenti ottieni effetti collaterali come quelle
che stai avendo.
Ciao

>>decimale restituisce 1,076  :-)
Certamente, ma il valore interno e' sempre lo stesso.
La funzione CDbl si occupa di convertire da stringa a numero in base alle 
impostazioni correnti.
La funzione CStr (che vb esegue in modo implicito, -- gran porcata il casting
implicito, imho -- ) equivale a Format$(numero, "General Number").
Il separatore decimale che viene visualizzato e', come giustamente rilevi,
quello indicato sul pannello di controllo.
Ergo, se esegui le operazioni utilizzando variabili esplicitamente dichiarate
come double, il carattere utilizzato come separatore decimale e'
del tutto ININFLUENTE.
ciao, hal

La mia richiesta era per un modo semplice per evitare tutto cio'.
Spero di esserci riuscito ;-)
ciao, hal

 micidiali.
Lo so, ma e' tanto comodo l'IDE ;-)
grazie
		maxx

 > micidiali.
'Sti mmerigani proprio non la capiscono che il mondo non è fatto solo dagli
USA :(
Ciao