View Full Version : [VB.NET]Convertire punti in virgole e viceversa
So già che è una classica domanda, che con una ricerca su Google si trova facile, ma io non riesco...
Premetto che se la tastiera è USA, ITA o ITA 142 non deve fare la differenza.
Per convertire, il comando più semplice che ho trovato è Replace:
variabile = Replace(variabile, ".", ",")
Se digito 1.1 il programma lo legge 11, se digito 1,1 viene letto giusto.
Con questa invece:variabile = Replace(variabile, ",", ".")
1,1 diventa 11 perché mi ha messo il punto al posto della virgola e quindi annullato.
In pratica il primo codice non funziona, e non capisco il perché, forse arriva troppo tardi perché il punto è già sparito?
Se così come posso intercettarlo?
Pure sul risultato, ho provato a rimpiazzare il punto con la virgola (le risposte decimali le da col punto), ma senza esito.
Cosa sbaglio? Qualcuno mi può aiutare?
Ps. Sto usando la console, non Windows Form.
Grazie a chi risponderà.
Gaiden80
27-11-2012, 22:56
variabile che tipo è? String o numero?
variabile che tipo è? String o numero?
Numero, per poter fare i calcoli: Single, così risparmio pure qualche Byte.
AllerITA
28-11-2012, 04:46
Forse non stai tenendo conto che il sistema operativo prede in considerazione già all'avvio il formato di ora data e numero che sono accettati della lingua del paese che quando lo installiamo impostiamo.
E' buona regola lasciare che questo sistema funzioni senza ambiguità.
Nel tuo caso vuoi inserire un numero che abbia la formattazione 1000000,1 e anche 1000000.1
Ora questo a prima vista sembra lecito.
ma se andiamo a cercare nelle impostazioni ad esempio italiane del formato di numero,
troviamo che per la formattazione numerica il punto separa le posizioni nel numero delle cifre migliaia milioni e via dicendo
per comodità di lettura
Quindi si può scrivere normalmente 1.000.000,1 e questo numero viene letto come un milione dal programma senza problemi.
Se ora mettiamo il caso volessimo usare una formattazione diversa cioè usare il numero con il formato inglese ad esempio
avremmo, se non ricordo male, 1,000,000.1 , ma possiamo addirittura personalizzare la formattazione.
Però senza utilizzare un formato ambiguo come questo 1.000.000.1 che non rende chiaro cosa significhi.
Tieni presente che nei fogli di calcolo, database ecc. si può formattare il numero utilizzando le impostazioni della lingua corrente.
Però se la tua è pura curiosità
puoi convertire la stringa in inserimento di WriteLine nel formato italiano con la "," al posto del "." per farla accettare dal programma come numero.
E poi puoi trasformarla con ToString e sostituire nuovamente la "," col "." oppure il "." con la ",", ma tieni presente che non è corretto il modo di affrontare il problema.
In pratica vorrei che nell'input, sia se viene scritto un punto o una virgola, il programma me lo leggesse come una virgola, oppure che impedisse l'inserimento del punto, ma questo sarebbe scomodo per chi scrive.
Il separatore migliaia attualmente non c'è, poi i numeri non saranno mai troppo grandi, senò non avrei usato Single.
In pratica vorrei che nell'input, sia se viene scritto un punto o una virgola, il programma me lo leggesse come una virgola, oppure che impedisse l'inserimento del punto, ma questo sarebbe scomodo per chi scrive.
Il separatore migliaia attualmente non c'è, poi i numeri non saranno mai troppo grandi, senò non avrei usato Single.
semplicemente il replace devi farlo su una stringa e non su un numero quindi prima sostituisci e dopo converti
semplicemente il replace devi farlo su una stringa e non su un numero quindi prima sostituisci e dopo converti
Il problema, è che una volta dato l'input, esempio 1.1, lui lo legge 11, quindi il punto da rimpiazzare non c'è.
Forse inserendo il dato come testo, poi convertendolo in numero, funzionerebbe, ma non è così che deve fare...
Prendiamo come esempio la calcolatrice di Windows, sia se digito il punto o la virgola, lui lo legge come una virgola...
...non riesco ad andarne fuori.
Gaiden80
28-11-2012, 22:04
l'input deve essere sempre come stringa. A seconda della lingua con cui è configurato (puoi anche gestirle dalla configurazione internazionale del sistema operativo) il decimale è il punto o la virgola. Quindi in teoria se digiti 1.1 o 1,1 hai una stringa, sostituisci il . con la , o viceversa e poi converti in single. La digitazione arriverà da una casella di testo immagino, quindi hai necessariamente una stringa.
Del resto tutti i linguaggi leggono come input sempre stringhe e char e poi convertono. Anche la calcolatrice di windows, legge carattere e verifica se sono validi per comporre l'operazione.
Quando converti con .net puoi utilizzare il parse ed utilizzare l'oggetto numberformat per definire lo standard.
l'input deve essere sempre come stringa. A seconda della lingua con cui è configurato (puoi anche gestirle dalla configurazione internazionale del sistema operativo) il decimale è il punto o la virgola. Quindi in teoria se digiti 1.1 o 1,1 hai una stringa, sostituisci il . con la , o viceversa e poi converti in single. La digitazione arriverà da una casella di testo immagino, quindi hai necessariamente una stringa.
Del resto tutti i linguaggi leggono come input sempre stringhe e char e poi convertono. Anche la calcolatrice di windows, legge carattere e verifica se sono validi per comporre l'operazione.
Quando converti con .net puoi utilizzare il parse ed utilizzare l'oggetto numberformat per definire lo standard.
Devo dire che facendo così funziona (grazie), per quel che riguarda l'input, il risultato però, anche se lo converto in stringa, mi rimane sempre col punto, non capisco perché...
Ps. Mi fai cortesemente un piccolo esempio del parse?
Gaiden80
30-11-2012, 19:14
se la casella di testo è txtNumero
float n=float.parse(txtNumero.Text);
se vuoi usare la globalitation
float n = float.Parse(txtNumero.Text, CultureInfo.GetCultureInfo("it-IT").NumberFormat);
cosi puoi gestire il formato in base alla nazione.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.