Newsgroup: it.comp.lang.visual-basic
Titolo: MA ISNUMERIC FUNZIONA O SONO IO?????

Ciao
Sto realizzando un programma che deve memorizzare in variabili currency
delle stringhe numeriche. Per testare se si tratta di una stringa numerica,
uso
la funzione Isnumeric;
tuttavia mi è capitato un caso strano:
applicando la funzione Isnumeric ad una stringa del tipo "0d261" mi viene
restituito
true!
ecco il codice di esempio:
Private Sub Command1_Click()
Dim s As String
Dim i As Currency
    s = "0d261"
    If IsNumeric(s) Then
        MsgBox "e' numerico"
        i = CCur(s)
    End If
End Sub
il risultato e' che entro nell'if ed all'struzione di conversione CCUR
mi esce un errore di overflow!!!
NB: Sto lavorando su di un PC con impostazioni inglesi(USA)
Saro' costretto a costruirmi una funzione Isnumeric ad hoc andando a
controllare che i caratteri della stringa
siano compresi entro l'intervallo dei caratteri numerici???
Grazie anticipatamente a coloro che vorranno aiutarmi.

siano compresi entro l'intervallo dei caratteri numerici???
No, sarà meglio che tu usassi una funzione così
Function MyCCur(Number as String, ByVal Default as currency) as boolean
    on error resume next
    MyCCur = CCur(number)
    if Err.Number <> 0 then MyCCur = Default
End function
Ciao

Allora, io ho provato e NON sono stato sorpreso; i risultati sono i
seguenti:
Stringa: '0d261'; valutazione: True
Stringa: '1d261'; valutazione: True
Stringa: '2x261'; valutazione: False
Stringa: '3zd261'; valutazione: False
Stringa: '3dz261'; valutazione: False
Che e' esattamente quanto mi aspettavo, dal momento che:
1) la documentazione dice, a proposito di IsNumeric: "Returns a
Boolean value indicating whether an expression can be evaluated as a
number"; nota che non valuta se la stringa e' costituita da numeri MA
se PUO' essere convertita in un numero. 
2) I primi due sono valori esadecimali, e quindi la conversione e'
possibile; i secondi tre non sono valutabili come numerici.
Al che mi sorge un dubbio: tu che risultati ottieni?
Ciao!
Luca Menegotto.
PS. se puo' essere rilevante: io us un VB6 SP4 in inglese.


 PS. se puo' essere rilevante: io us un VB6 SP4 in inglese.
Prova a leggere quanto ho scritto ieri nell'altro thread sullo
stesso argomento...
--
Ciao.
Maurizio
--------
?SPQR(C)
 X




 Le stringhe senza senso sono le seconde tre, dal momento che
i caratteri x e z non sono considerati cifre esadecimali (che
come certamente saprai sono da 0 a 9 e da a a f).
Ma hai letto il mio post che ti ho segnalato?


Si, l'ho letto, e devo dire che non ci avevo dato il giusto peso. L'ho
riletto e, fatte due prove, devo inevitabilmente concordare con te.
Faccio pubblicamente ammenda.
Il test che avevo fatto io era solo sulle stringhe che avevi dato tu.
In effetti se usi una stringa del tipo "1f9", allora non viene
riconosciuto come numerico.
Pero' ne ho scoperta un'altra di fantasiosa: se tu la conversione di
"0e20" la fai in Long invece che double, va in errore di overflow!!!
Il che implica che il calcolo avviene senza alcun controllo (ossia, il
10 elevato alla 20 lo esegue comunque!! Alla faccia
dell'ottimizzazione!)
Ciao!
Luca Menegotto


 Il che implica che il calcolo avviene senza alcun controllo
(ossia, il 10 elevato alla 20 lo esegue comunque!! Alla faccia
dell'ottimizzazione!)
Non l'hai scoperto tu;-) E' da li` che e` partito tutto il
discorso. Si trattava di CCur e non di CLng ma l'errore
(Overflow) e` lo stesso ed anche le cause sono le stesse. Nel
mio post di cui sopra ho sottolineato quanto riferisce Balena
a proposito di IsNumeric e CDbl. E ci conviene fare sempre
attenzione a questo particolare perche' e` importante.
Io, in conclusione, resto con la curiosita` di sapere in quale
notazione "scientifica" venga usata la lettera "d" al posto
della "e"!...


 Il che implica che il calcolo avviene senza alcun controllo
(ossia, il 10 elevato alla 20 lo esegue comunque!! Alla faccia
dell'ottimizzazione!)
Non l'hai scoperto tu;-) E' da li` che e` partito tutto il
discorso. Si trattava di CCur e non di CLng ma l'errore
(Overflow) e` lo stesso ed anche le cause sono le stesse. Nel
mio post di cui sopra ho sottolineato quanto riferisce Balena
a proposito di IsNumeric e CDbl. E ci conviene fare sempre
attenzione a questo particolare perche' e` importante.
Io, in conclusione, resto con la curiosita` di sapere in quale
notazione "scientifica" venga usata la lettera "d" al posto
della "e"!...
--


Al che mi sorge un dubbio: tu che risultati ottieni?
Ecco i miei con VB6 sp3
? 0d261
 0
? 1d261
 1E+261
? 2x261
 2
? 3zd261
 3
? 3dz261
Errore di sintassi
Boh?