Double.Parse y Decimal.Parse con símbolos de putuación

5 julio, 2011 por Juan Dejar una respuesta »

Un problema que me encuentro a menudo en .Net por igual en Visual Basic o en C#, es cuando tengo que parsear un decimal o un double desde un string. Muchas veces, cuando parseas un double o un decimal, encontramos un error ya que en operaciones matemáticas, el símbolo de puntuación para la parte decimal es el punto, por lo que al hacer un Double.Parse(number) o un Decimal.Parse(number), lo que hace es ignorar el punto y por tanto tomar la parte decimal como si fuera parte entera. Para que esto no nos pase, tenemos que indicar que el sistema numérico utilizado es el matemático, aquel que no varia con la cultura. Con un ejemplo se verá mas claro.

Un ejemplo en C#:

string number = "15.3";
double doNumber;
decimal deNumber;

doNumber = double.Parse(number);
deNumber = decimal.Parse(number);

/*
Los valores son:
doNumber = 153
deNumber = 153
*/

doNumber = double.Parse(number, CultureInfo.InvariantCulture);
deNumber = decimal.Parse(number, CultureInfo.InvariantCulture);

/*
Los valores son:
doNumber = 15.3
deNumber = 15.3
*/

Un ejemplo en VB.Net

Dim number As String = "15.3";
Dim doNumber As Double;
Dim deNumber As Decimal;

doNumber = double.Parse(number);
deNumber = decimal.Parse(number);

'Los valores son:
'doNumber = 153
'deNumber = 153

doNumber = double.Parse(number, CultureInfo.InvariantCulture);
deNumber = decimal.Parse(number, CultureInfo.InvariantCulture);

'Los valores son:
'doNumber = 15.3
'deNumber = 15.3

CultureInfo es una clase que provee de información de las culturas y en concreto, la propiedad InvariantCulture o CultureInfo.InvariantCulture, es quien provee la información de la cultura que no varia por localizaciones, vease el simbolo de puntuación matemático. La clase CultureInfo se encuentra en el namespace System.Globalization, quedado la ruta así: System.Globalization.CultureInfo.InvariantCulture.

Publicidad

Deja un comentario