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

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#:

[sourcecode language="csharp" title="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
*/
[/sourcecode]

Un ejemplo en VB.Net

[sourcecode language="vb" title="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
[/sourcecode]

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.

3 comentarios en “Double.Parse y Decimal.Parse con símbolos de putuación

  1. Pingback: Bitacoras.com
  2. A mi no me resulta de esa manera, sí me cambia los números a decimales, pero me los pone con una coma, por decir yo quiero 8.333 y me sale 8,333. Como puedo hacerle para arreglarlo

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *