Autore Topic: Formattazione stringhe italiano e usa (da newbee..)  (Letto 620 volte)

Offline andy60

  • Senatore Gambero
  • ******
  • Post: 1.255
    • Mostra profilo
    • https://www.linkedin.com/in/andbertini
Formattazione stringhe italiano e usa (da newbee..)
« il: 29 Agosto 2010, 10:27:23 »
formato italiano 1.234,45
formato usa 1,234.45

i dati in immissione (variabili) vanno messi in formato usa ma poi escono nel ns formato o sbaglio, o sto dicendo una scemenza? è utile scrivere una funziona che controlla il formato in entrata e lo converte nel formato voluto da gambas per i float ad esempio?

se metto 2.6 me lo accetta in entrata, se metto 2,6 no

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: Formattazione stringhe italiano e usa (da newbee..)
« Risposta #1 il: 29 Agosto 2010, 12:40:42 »
formato italiano 1.234,45
formato usa 1,234.45

i dati in immissione (variabili) vanno messi in formato usa ma poi escono nel ns formato o sbaglio, o sto dicendo una scemenza? è utile scrivere una funziona che controlla il formato in entrata e lo converte nel formato voluto da gambas per i float ad esempio?

se metto 2.6 me lo accetta in entrata, se metto 2,6 no

Se non ricordo male questo dovrebbe dipendere dalle impostazioni generali del tuo sistema operativo. Comunque puoi sempre modificare una textbox in modo che accetti numeri o con il punto o con la virgola.

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Formattazione stringhe italiano e usa (da newbee..)
« Risposta #2 il: 29 Agosto 2010, 15:11:32 »
Io non mi preoccupo, durante la digitazione,  di capire quale sia il crt che Gambas accetta come separatore dei decimali. Nelle mie text box, attraverso l'evento Keypress, interrogo l'eventuale digit "." o "," ed in ogni caso lo considero come un carattere separatore che trasformo in "," per mopstrarlo secondo la consuetudine nostrana; poi, a fine digitazione, prima di trasformare il valore della variabile stringa, appena digitata, in numero, restituisco al separaatore dei decimali il suo valore "." ed eseguo il successivo trasferimento nella variabile di destinazione, definita "float". Ti posso assicurare che mi sono trovato benissimo.
Ciao.
:ciao:

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Formattazione stringhe italiano e usa (da newbee..)
« Risposta #3 il: 30 Agosto 2010, 01:56:13 »
Sì, il formato dei numeri in virgola mobile vengono rappresentati in base alle impostazioni di lingua del sistema.

Hai due alternative:

1) imposti la lingua di Gambas2 con System.Language
2) Utilizzi la funzione Replace() per trasformare eventuali virgole in punti.

anche l'intercettazione dell'evento è valida (come descritto da picavbg), ma dipende da cosa vuoi ottenere.

Un mio suggerimento è di lasciare la visualizzazione così com'è, in base alla lingua del sistema operativo, così da permetterne la trasportabilità, e trasformare il valore dopo aver effettuato l'input.

Io di solito faccio così, perchè il problema maggiore viene in caso di trasformazione stringa/valore/stringa, che dipende dalle funzioni che usi. Per un fattore di trasportabilità, i valori Float devono essere mantenuti sempre e comunque internamente con un punto; la virgola viene usata nelle lingue latine, ecc.

Ricordati sempre che quello che ho detto è valido non solo per tutti i linguaggi di programmazione, ma è un concetto generale di base.

Tanto per dire, per i numeri abbiamo tre strati:

1) il formato binario, ovvero il valore com'è in memoria
2) per i valori in virgola mobile, il valore binario ha un formato particolare, completamente diverso dai numeri semplici
3) la sua rappresentazione in formato leggibile, purtroppo diversa da paese a paese...

Offline andy60

  • Senatore Gambero
  • ******
  • Post: 1.255
    • Mostra profilo
    • https://www.linkedin.com/in/andbertini
Re: Formattazione stringhe italiano e usa (da newbee..)
« Risposta #4 il: 30 Agosto 2010, 11:23:01 »
Sì, il formato dei numeri in virgola mobile vengono rappresentati in base alle impostazioni di lingua del sistema.

Hai due alternative:

1) imposti la lingua di Gambas2 con System.Language
2) Utilizzi la funzione Replace() per trasformare eventuali virgole in punti.

anche l'intercettazione dell'evento è valida (come descritto da picavbg), ma dipende da cosa vuoi ottenere.

Un mio suggerimento è di lasciare la visualizzazione così com'è, in base alla lingua del sistema operativo, così da permetterne la trasportabilità, e trasformare il valore dopo aver effettuato l'input.

Io di solito faccio così, perchè il problema maggiore viene in caso di trasformazione stringa/valore/stringa, che dipende dalle funzioni che usi. Per un fattore di trasportabilità, i valori Float devono essere mantenuti sempre e comunque internamente con un punto; la virgola viene usata nelle lingue latine, ecc.

Ricordati sempre che quello che ho detto è valido non solo per tutti i linguaggi di programmazione, ma è un concetto generale di base.

Tanto per dire, per i numeri abbiamo tre strati:

1) il formato binario, ovvero il valore com'è in memoria
2) per i valori in virgola mobile, il valore binario ha un formato particolare, completamente diverso dai numeri semplici
3) la sua rappresentazione in formato leggibile, purtroppo diversa da paese a paese...

grazie per la puntualizzazione, amico mio, io ho risolto con replace, non so se è la soluzione migliore ma funge:

Codice: [Seleziona]
PUBLIC FUNCTION ParseStringa(s AS String) AS String
DIM x AS Integer
DIM check AS Boolean
check = FALSE
FOR x = 1 TO Len(s)
IF Mid$(s, x, 1) = "," THEN
  check = TRUE
ENDIF
NEXT
IF check = TRUE THEN
RETURN Replace$(s, ",", ".")
ELSE
RETURN s
ENDIF
END

sai che il database di gambas in inserimento dati float vuole la virgola?

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Formattazione stringhe italiano e usa (da newbee..)
« Risposta #5 il: 30 Agosto 2010, 11:41:41 »
Come ho detto, dipende dalla funzione utilizzata.

Se utilizzi la funzione Str(), questa tiene conto delle impostazioni di lingua, ovvero si aspetta la virgola se italiano.
Se utilizzi CFloat(), si aspetta invece un formato standard, ovvero con il punto.

Questi due sono solo esempi.
Nelle mie funzioni uso il Replace, perchè semplifica di molto la vita e mi evita di scrivere codice per ogni evento di ogni controllo che gestisce valori numerici. DI solito faccio il controllo in una sola fase, e la conversione pure, permettendomi di usare una singola funzione, e in un singolo punto del programma.