Please Wait
Cosa Cerchi?  

Conversione di una stringa al tipo Double senza Localizzazione

Convert String to Double without localization (locale)

In questo articolo spiegherò brevemente un modo per convertire una stringa contenente un numero con decimali separati dal punto (.) in un tipo Double in modo corretto.

Faccio una piccola premessa. Tanti sicuramente conoscono la funzione cDbl che converte un'espressione in un tipo Double, ma non tutti sanno che questa funzione effettua la conversione utilizando le impostazioni della lingua (localizzazioni) del sistema operativo. Questo può generare problemi in quanto se il sistema sul quale è in esecuzione la nostra procedura è Italiano il separatore per le cifre decimali è la virgola, mentre per sistemi in inglese è il punto.

Ad esempio, ipotizziamo di eseguire le seguenti conversioni:

Dim stringToConvert As String
Dim convertedValue As
Double

stringToConvert =
"123.45"
convertedValue = CDbl (stringToConvert)
Console.WriteLine(convertedValue.ToString())

stringToConvert = "123,45"
convertedValue = CDbl (stringToConvert)
Console.WriteLine(convertedValue.ToString())

Eseguendo il codice riportato qui sopra su un sistema operativo con l'impostazione della localizzazione italiana otterrei il seguente risultato:

12345
123,45

Nel caso in cui, invece lo eseguissi su un sistema operativo con localizzazione inglese, il risultato sarebbe il seguente:

123.45
12345

Risulta quindi evidente che la nostra applicaione potrebbe restituire risultati diversi pur eseguendo la medesima istruzione, dipendendo dalla localizzazione del computer o meglio del sistema operativo in uso.

Vediamo ora come è possibile forzare la localizzazione nella conversione di una Stinga nel tipo Double, con il seguente codice:

Dim stringToConvert As String
Dim convertedValue As Double

StringToConvert = "123.45"
convertedValue = Double.parse(stringToConvert, New System.Globalization.CultureInfo( "en-US"))
Console.WriteLine(convertedValue.ToString())

Il risultato che otterremo su sistema operativo in italiano sarà il seguente:

123,45

Su sistema operativo inglese:

123.45

Ma, aldilà della formattazione dell'output, il dato in memoria è un Double correttamente gestito.

Commenti
Freelance Jobs

Credits

x

Layout e Contenuti © Stefano Pozzati (POZZware.com)
Realizzazione Tecnica e Grafica © Stefano Pozzati (POZZware.com)
Hosting - Aruba (www.aruba.it)
Immagini del titolo © Shunya Yamashita (http://shunyama.web.fc2.com/)
 

Realizzato con:  WebSitter By Pozzware.com Browser compatibili:  Explorer Internet Explorer 6
Firefox Mozilla FireFox 2
Chrome Google Chrome
 
Strumenti:  FCK Editor
JQuery
Valid XHTML 1.0 Transitional CSS Valido!