Newsgroup: it.comp.lang.visual-basic
Titolo: formattazione numeri

vorrei che il numero immesso su una Textbox esempio 10.5 (notare: 10 punto 
5) fosse considerato come 10,5 (notare la virgola) in uanto in fase di 
calcoli sono due valori differenti.
Ho pensato a Replace (Text, "." ,",") ma oltre a questo ci possono essere 
altri modi migliori senza modificare le impostazioni di Windows? 

 altri modi migliori senza modificare le impostazioni di Windows?
Quella è una porcata, fai finta di non averla neppure scritta.
Modificare le impostazioni di windows è ancora peggio.
Scegli cosa vuoi ottenere e applica la funzione adeguata, e sarai a 
posto per sempre. La guida è dalla tua parte.
Alberto
-- 
Charles Baudelaire: C'è un solo modo di dimenticare il tempo: 
impiegarlo.


Appunto, voglio la possibilità di lasciare inserire all'utente sia 10,5 che 
10.5 ma che mi assuma in fase di calcolo il valore 10,5.
Per fare questo ho inserito il replace negli eventi della Textbox in modo 
che quando si digita il punto si trasformato in virgola.
La mia domanda era solo se ci fosse un modo diverso dal mio, visto che anche 
CDbl(10.5) <>10,5


Se non utilizzi *mai* la virgola
nella TextBox:
Private Sub Text1_KeyPress(KeyAscii As Integer)
    If KeyAscii = 44 Then
        KeyAscii = 46
    End If
End Sub
Se non utilizzi *mai* il punto, inverti.
-- 
---------------------------
Mauro Gamberini
http://www.riolab.org/
 


Vedo che anche tu usi un metodo simile al mio, la sostituzione durante la 
digitazione. Almeno noi siamo d'accordo.
Ma io sto attendendo una risposta da Albe V° visto che ha detto "Quella è 
una porcata, fai finta di non averla neppure scritta...." ed allora volevo 
sapere lui cosa mi consiglia... 

Nel suo scritto precedente, XP ha sostenuto :

Io uso una mia banale funzione di parsing, che individua il separatore 
locale (che potrebbe non essere nè il punto nè la virgola), e cerca il 
primo carattere, partendo da destra, che sia O un punto O una virgola O 
un separatore locale, a questo punto elimina tutto ciò che non siano 
quel carattere e le cifre, mette il punto al posto del carattere 
'separatore' individuato prima, e fa un normale Val.
Avevo anche postato il codice, tempo fa.
L'importante è evitare gli approcci con quei replace che funzionano una 
volta si e cinque no.
Alberto
-- 
Heinrich Zille: Ognuno crede che l'altro sia come se stesso, 
dimenticando che al mondo esistono anche delle persone oneste.

Il 28/10/2008, XP ha detto :

Scusa, forse tu intendevi capire il perchè della mia osservazione.
Dunque, tu scrivevi: Replace (Text, "." ,",")
Questa cosa è pessima perchè:
- Non espliciti la proprietà .Text, rendendo il codice meno leggibile.
- Il valore contenuto nella textbox ti serve per dei calcoli (come tu 
stesso hai scritto), mentre non utilizzi alcuna funzione di conversione 
esplicita da stringa a numerico (che è invece il cuore del problema)
- Un replace di quel tipo assume che il separatore usato dall'utente 
sia il punto e non un separatore personalizzato (che può sempre 
esserci, a me è successo di trovare di tutto, anche caratteri 
'invisibili', come il separatore delle migliaia in Francia)
- Un replace di quel tipo assume che il separatore locale sia la 
virgola (altrimenti il CDbl implicito che ne segue andrebbe in errore)
Volendo proprio cercare una funzione 'minimale' che in qualche modo, 
seppur con mille problemi, potesse darti un minimo di possibilità di 
ottenere l'effetto voluto, avresti piuttosto dovuto utilizzare il 
replace opposto, ossia:
Val(Replace$(Text1.Text, ",","."))
in questo modo, se l'utente usa il punto, sei a posto perchè sei già in 
un formato delocalizzato. Se usa la virgola, sei a posto, perchè con 
quel replace ti sposti da un formato locale a uno delocalizzato. 
Ovviamente ti esponi a altre cose, ma almeno hai azzeccato alcune 
formattazioni.
(ripeto che comunque NON è una bella soluzione, ma solo un esempio per 
chiarire il concetto)
In sostanza, il problema della tua soluzione non era nell'uso di vb6, 
quanto nella mancanza di alcuni princìpi fondamentali, come l'utilizzo 
corretto dei tipi e delle formattazioni locali. Diciamo che se in 
alcuni casi la tua soluzione riusciva a buttarti fuori qualcosa, era 
solo perchè vb6 è molto buono. Con strumenti più rigorosi, non saresti 
riuscito neppure a compilare, men che meno a eseguire.
Ciao
Alberto
-- 
La forza di volontà è guardare negli occhi una ragazza in topless.

GRAZIE.
Questa č una vera risposta! Cosě hai potuto farmi capire la ragione della 
tua affermazione iniziale.
Capisco che ti abbia portato via un po' di tempo (e di questo ti ringrazio) 
ma cosě facendo mi hai spiegato qualcosa di importante di cui non ero a 
conoscenza.
Un saluto.