Autore Topic: [Risolto] Funzione conversione float  (Letto 2708 volte)

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:Funzione conversione float
« Risposta #15 il: 15 Marzo 2019, 17:56:21 »
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

Ma tu come ottieni queste stringhe, le tagli a quattro prima o dopo?
Può anche esserci un numero con tre decimali?
Può esserci un numero con decine o centinaia di migliaia?
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
Re:Funzione conversione float
« Risposta #16 il: 15 Marzo 2019, 18:12:48 »
le taglio dopo solo se hanno più di quattro.
senza decimali o con massimo 4 le converto direttamente in float

ho provato scan
funziona bene
non mi tocca i numeri
1234
1234.55
1.222,235569
che posso convertire tranquillamente togliendo il punto con replace

mi modifica il numero
3,898.4444 come mi serve

ora dovrei fare una struttura che mi converta questi numeri con decimali diversi tipo

3,898.4
3,898.44
3,898.444
3,898.4444

oltre i quattro non mi serve solo che scan non opererebbe oltre 4 decimali e mi tocca tagliarli prima





Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
Re:Funzione conversione float
« Risposta #17 il: 15 Marzo 2019, 18:25:35 »
Codice: [Seleziona]
If s Like "*,*.?" Then
    Print
else If s Like "*,*.??" Then
   Print
else If s Like "*,*.???" Then
print
else If s Like "*,*.????" Then
print
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)
« Ultima modifica: 15 Marzo 2019, 18:27:14 da dex »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:Funzione conversione float
« Risposta #18 il: 15 Marzo 2019, 18:34:45 »
Codice: [Seleziona]
If s Like "*,*.?" Then
    Print
else If s Like "*,*.??" Then
   Print
else If s Like "*,*.???" Then
print
else If s Like "*,*.????" Then
print
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".
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.722
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Funzione conversione float
« Risposta #19 il: 15 Marzo 2019, 18:41:12 »
La funzione Scan( ) nella nostra Wiki:

  https://www.gambas-it.org/wiki/index.php?title=Scan
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:Funzione conversione float
« Risposta #20 il: 15 Marzo 2019, 18:46:45 »
Ciao vuott,
ma qui il problema per dex è LIKE, Scam è più semplice usi solo gli asterischi.
Ci sarebbe regex, che potrebbe aiutare, ma credo che ci si possa arrangiare anche con Like usando qualche passaggio in più.
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
Re:Funzione conversione float
« Risposta #21 il: 15 Marzo 2019, 18:56:07 »
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

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:Funzione conversione float
« Risposta #22 il: 15 Marzo 2019, 19:06:07 »
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

Inizio a confondermi  :rolleyes:
Io credo che 0.123 sia sicuramente errato e 0,123 sia corretto.
Ma se non abbiamo modo di sapere se 3.456 sia corretto perché potrebbe essere 3,456 americano allora mi dispiace ma neppure San Giorgio che mangiava draghi a colazione ti può aiutare.
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.722
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Funzione conversione float
« Risposta #23 il: 15 Marzo 2019, 19:08:39 »
Vorrei capire una cosa: la parte frazionaria del gruppo di caratteri numerali ricevuti è composta sempre e solo da due cifre ?
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:Funzione conversione float
« Risposta #24 il: 15 Marzo 2019, 19:09:54 »
Vorrei capire una cosa: la parte frazionaria del gruppo di caratteri numerali ricevuti è composta sempre e solo da due cifre ?

Ma se ha appena detto che ce ne possono essere anche venti  :violent:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:Funzione conversione float
« Risposta #25 il: 15 Marzo 2019, 19:13:48 »

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


Qui non c'è casino perché
Codice: [Seleziona]
Like "*.???,*"
te lo rilevano e poi ti basta rimuovere eventuali virgole o punti finali e/o iniziali.
« Ultima modifica: 15 Marzo 2019, 19:17:21 da Gianluigi »
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
Re:Funzione conversione float
« Risposta #26 il: 15 Marzo 2019, 19:21:11 »
Gian scusa se ti ho confuso

in pratica si tratta di cataloghi vari e in varie valute, quando il separatore decimale è uno solo che sia punto o virgola non ha importanza, lo converto con replace e risolvo

quando mi arrivano cifre formattate americane o nostrane con . e , diventa più complicato, le nostrane le risolvevo con replace togliendo il . le americane dovrei togliere la virgola, quindi dovrei fare due codici, 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.

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
Re:Funzione conversione float
« Risposta #27 il: 15 Marzo 2019, 19:30:26 »
Codice: [Seleziona]
If s Like "*,*.?" Then
    Print
else If s Like "*,*.??" Then
   Print
else If s Like "*,*.???" Then
print
else If s Like "*,*.????" Then
print
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".

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

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:Funzione conversione float
« Risposta #28 il: 15 Marzo 2019, 19:34:05 »
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.

Non capisco perché devi farlo a mano ti basta estrarre un unico valore sicuro e poi lo traduci in altre valute moltiplicandolo per il corretto fattore.
Una volta i listini prezzi erano il mio pane Excel non aveva segreti  ;D
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:Funzione conversione float
« Risposta #29 il: 15 Marzo 2019, 19:40:09 »


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
Intanto vorrei capire chi è quel pazzo che fa listini con 20 decimali...
Comunque avrai un massimo di decimali o no?
Oppure: Avrai un carattere delimitatorio? Intendo dire che ci sarà pure una fine del numero e poi qualcosa?
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro