Print Cinst(Val(stringa)) If Not IsNull(Val("87)756")) Then
Print "È un numero"
Else
Print "Non è un numero"
Endif If Val("87)756") Then
Print "È un numero"
Else
Print "Non è un numero"
EndifIf "876.00" Like "*.??" Then Print Replace("876.00", ".", ",")Public Sub Main()
Dim s As String
'' Se il numero più grande è una cosa del genere s = "123,456,789,987.89"
'' parti da quel pattern e scali fino a:
s = "123,456.78" '' che funziona anche su 12,345.67 e 1,234.56
If s Like "*,*,*,*.??" Then
Print Scan(s, "*,*,*,*.*")[0] & "." & Scan(s, "*,*,*,*.*")[1] & "." & Scan(s, "*,*,*,*.*")[2] & "." & Scan(s, "*,*,*,*.*")[3] & "," & Scan(s, "*,*,*,*.*")[4]
'' ...
Else If s Like "*,*.??" Then
Print Scan(s, "*,*.*")[0] & "." & Scan(s, "*,*.*")[1] & "," & Scan(s, "*,*.*")[2]
Endif
End
se dovesse arrivare 5.666,3333, da come ho letto il tuo codice non dovrebbe fare nulla, giusto?
semplice a me i dati arrivano:
1234
1234.55
1.222,235569
3,898.4444
ho solo queste varianti, quando i decimali superano 4 le taglio
If s Like "*,*.?" Then
Print
else If s Like "*,*.??" Then
Print
else If s Like "*,*.???" Then
print
else If s Like "*,*.????" Then
print
EndifCodice: [Seleziona]If s Like "*,*.?" Then
else If s Like "*,*.??" Then
else If s Like "*,*.???" Then
else If s Like "*,*.????" Then
Endif
in questo modo dovrei risolvere, solo che se i decimali superano 4?
mi possono capitare cifre sballate con decine o molte decine di decimali (sono quelle che mi davano errore di segmentazione)
no gianluigi ti eri spiegato bene
sono gli americani (e anche i nostrani) che danno problemi, un numero che arriva 3.456 oppure 0.123 è giusto come pure 0,456 o 0,123
sono vecchi cataloghi da cui devo tirare i prezzi.
quelli che creano casino sono:
1,234.56 oppure 1.234,56, in pratica con un solo separatore va bene, con due le cose si complicano
ciao vuott
Vorrei capire una cosa: la parte frazionaria del gruppo di caratteri numerali ricevuti è composta sempre e solo da due cifre ?
quelli che creano casino sono:
1,234.56 oppure 1.234,56, in pratica con un solo separatore va bene, con due le cose si complicano
Like "*.???,*"Codice: [Seleziona]If s Like "*,*.?" Then
else If s Like "*,*.??" Then
else If s Like "*,*.???" Then
else If s Like "*,*.????" Then
Endif
in questo modo dovrei risolvere, solo che se i decimali superano 4?
mi possono capitare cifre sballate con decine o molte decine di decimali (sono quelle che mi davano errore di segmentazione)
Occorre stare molto attenti alle successioni dei pattern di ricerca.
Ad esempio con questi pattern non rileveresti i numeri con più di 4 decimali, dovresti pertanto tagliare i numeri prima di usare i pattern.
Questo codice funzionerebbe bene se dovessi convertire solo numeri americani fino a 9,999 e con massimo 4 decimali, ma con numeri mischiati cambierebbe anche quelli giusti tipo 3.456 (tremila quattrocentocinquantasei) in 3,456 (tre virgola ...).
Non so se riesco a spiegarmi.
Quindi, come suggerivi prima, conviene fare un primo passaggio che rileva i numeri "italiani" e li cancella o cambia in modo che non diano fastidio e poi fare un secondo passaggio sui numeri "americani".
il problema è che molti cataloghi hanno per lo stesso articolo i prezzi in varie valute, e li mi tocca digitare a manina ed è estremamente noioso.
Intanto vorrei capire chi è quel pazzo che fa listini con 20 decimali...
era su questa tua risposta che intendevo il casino
posso tagliare le stringhe a 4 decimali ma con quale criterio di ricerca?
se uso il punto
1,234.12345679 ecc diventa 1,234.1234 poi con replace tolgo la virgola ed è ok
ma se mi arriva 1.234,123456789 diventa 1.234, ed è sbagliato
usando la ricerca con la virgola avrei il problema inverso
io per uniformare il tutto taglio a 4Quindi mi fai capire che non appena ricevi i dati riduci immediatamente i decimali a non più di 4, se essi sono in origine più di 4.
Select Case SeparatoreDec
Case "."
s = Replace(s, ",", "")
Case ","
s = Replace(s, ".", "")
s = Replace(s, ",", ".")
End Selectla funzione serve per salvare i dati nel database al giusto formato