Newsgroup: it.comp.lang.visual-basic
Titolo: EURO e le virgole...che pazienza !!

Sono scemo?  ... si.
Ho perso una montagna di ore e non ho risolto niente. Aiuto!!!
Vengo al punto con due parole:
a = a + Val ( b )
" a " é una variabile che viene aggiornata aggiungendo il valore di " b "
ogni volta che il ciclo si ripete ma il problema é che la stringa " b "
contiene un valore con decimali ( in effetti sono EURO e centesimi ad
esempio "25,60" ).
Al momento che la stringa viene convertita in numero la variabile numerica
( in questo caso " a " ) perde i decimali e si presenta come valore " 25 ".
Ho provato a dichiarare le Dim di " a " in tutti i modi ma il risultato non
cambia.
Certamente esiste una soluzione a parte quella di moltiplicare x 100 e poi
dividere ma io non l'ho trovata.
Qualcuno mi aiuta.
Grazie

 esempio "25,60" ).
Il Val() ti fa perdere i decimali, non è consigliabile usarlo.
Credo che ti convenga usare il CDbl().
Buon lavoro, Giorgio.

 Ho perso una montagna di ore e non ho risolto niente. Aiuto!!!
Su MSDN, per la funzione Val c'è una paginetta molto corta.
Termina con:
Note   The Val function recognizes only the period (.) as a valid decimal
separator. When different decimal separators are used, as in international
applications, use CDbl instead to convert a string to a number.
In 'una montagna di ore' potevi trovare due minuti per leggere tutta la
paginetta :-))
Ciao
Alberto

 paginetta :-))
Eeeeh, guida (F1) e debugger (CTRL+G): i migliori amici di un programmatore,
traditi dal programmatore stesso :(
Bastava anche fare un dbug.print Val(a) per rendersi conto di quanto
succedeva, e al massimo ingegnarsi con un Val(Replace(a, ",", ".").
Così impara a fidarsi delle conversioni implicite :PPP
Ciao
--
using System.Gtk.Forms = "
http://www.neodatatype.net/windowsforms/sgf.aspx
"
mathParser = "
http://www.neodatatype.net
"
sitoComune = "
http://www.it-lang-vb.net
"

 Purtroppo anche con CDbl() perdo i decimali.
Grazie comunque, Roberto

 L'ho letta, ho usato CDbl() ma non funziona.
Ciao, grazie, Roberto

 Questa del Val(Replace...  non l'ho provata.
Ti farò sapere.
Ciao, grazie, Roberto

> L'ho letta, ho usato CDbl() ma non funziona.
CDbl converte una stringa in un double, e riconosce il separatore decimale
CHE HAI IMPOSTATO NEI REGIONAL SETTINGS.
In ogni caso non si PERDE i decimali, al massimo converte "1,25" in 125
perché interpreta la virgola come separatore di gruppi di cifre, ovvero non
se la caga proprio. Questo se la virgola la usi come separatore dei gruppi,
all'inglese. Poi se la virgola non è neanche separatore delle migliaia, ti
dovrebbe dare proprio "Type mismatch error".
Prova a vedere come hai settato le impostazioni per il formato dei numeri.
Vedrai che se le impostazioni sono all'italiana, avrai:
CDbl("1.23") = 123
CDbl("1,23") = 1,23 (uno e ventitrè centesimi)
Val("1.23") = 1,23 (uno e ventitrè centesimi)
Val("1,23") = 1 (ma anche Val("1,duetre") = 1 !)
Con le impostazioni americane:
CDbl("1.23") = 1.23 (uno e ventitrè centesimi)
CDbl("1,23") = 123
Val("1.23") = 1.23 (uno e ventitrè centesimi)
Val("1,23") = 1
Come vedi MSDN diceva il vero: Val vuole comunque il punto, CDbl controlla i
regional settings. Quello che ti viene "restituito" è un numero. Quello che
ti viene "mostrato" è la formattazione locale di quel numero. Il fatto che
in un caso il sistema te lo stampi come 1,23 e nell'altro come 1.23 non
cambia il valore di 123/100
Ciao, Silv:o)

 ha scritto nel messaggio
news:atkode$1f32$1...@ID-49224.news.dfncis.de...

Questa sera, quando rientro, ci riprovo e domani ti faccio sapere.
Ciao Roberto

 a = a + Val ( b )
prova cosě se no non capisci!
dim a as double
dim b as string
a=10
b="1.324"
a=a+cdbl(b)
debug.print a
a=10
b="1.324,458"
a=a+cdbl(b)
debug.print a
a=10
b="1,324"
a=a+cdbl(b)
debug.print a
HAI CAPITO ORA????
:-)
bye man!