Categorías: Tutoriales

Curso C# con Mono – Conversión de tipos e información cultural

Cuando estamos trabajando con diferentes tipos de datos, siempre conviene conocer los mecanismos para convertir un tipo de datos en otros. Si a eso le sumamos, que podamos hacer aplicaciones en las que se trabaje introduciendo datos siguiente el formalismo español (comas para separar decimales, puntos para separar miles) o viceversa (podéis ver un mapa de dónde se usa cada separador decimal aquí).

Esto es lo que se llama la información cultural, que se sitúa dentro del ensamblado: System.Globalization, y que aparte de en este tema es conveniente conocer para otras tareas.

Casting

Es la forma más simple de hacer una conversión de datos. Está directamente heredada de C y puede ser implícita (si no se especifica) o explícita (cuando sí lo hacemos). Tiene grandes limitaciones porque básicamente sólo permite no convertir, sino camuflar, para una instrucción en concreto el tipo de dato.

Veamos un ejemplo:

int i = 10;
float f = 0;
f = i;  // conversión implícita
f = 0.5F;
i = (int)f;  // conversión explícita. Existe pérdida de información, los decimales

Métodos ToString

Al igual que en otros muchos lenguajes de programación, a este nivel de abstracción, existe un método ToString, definido en cada clase, que convierte cualquier objeto en una cadena. Si tenemos un entero que tiene dentro el valor 1, devolverá una cadena “1”; igualmente pasará  con un decimal, pero aquí es donde entra la información cultural en juego. Si tenemos la cultura predefinida como la española, mostrará comas y punto de acuerdo a nuestra forma de hacerlo, si definimos otra cultura predefinida, el comportamiento cambiará conforme a eso. También podemos cambiar de forma puntual la cultura predefinida para un punto en concreto.

Veamos ejemplos de uso avanzado de ToString usando especificadores, para mostrar el mismo número por pantalla con decimales, sin ellos, en formato moneda, con porcentaje…

decimal valor = 16325.62m;
string especificador;

// Sin especificador
Console.WriteLine("Sin el especificador tenemos el valor: " + valor.ToString());
// Especificador numérico estándar
especificador = "G";
Console.WriteLine("Con el especificador: " + especificador + " tenemos el valor: " + valor.ToString(especificador));
// Muestra: 16325,62
especificador = "C";
Console.WriteLine("Con el especificador: " + especificador + " tenemos el valor: " + valor.ToString(especificador));
// Muestra: 16.325,62€
especificador = "E04";
Console.WriteLine("Con el especificador: " + especificador + " tenemos el valor: " + valor.ToString(especificador));
// Muestra: 1,6326E+004
especificador = "F";
Console.WriteLine("Con el especificador: " + especificador + " tenemos el valor: " + valor.ToString(especificador));
// Muestra: 16325,62
especificador = "N";
Console.WriteLine("Con el especificador: " + especificador + " tenemos el valor: " + valor.ToString(especificador));
// Muestra: 16.325,62
especificador = "P";
Console.WriteLine("Con el especificador: " + especificador + " tenemos el valor: " + valor.ToString(especificador));
// Muestra: 1.632.562,00%

Veamos un ejemplo de uso con información cultural (CultureInfo):

System.Globalization.CultureInfo culture  = new System.Globalization.CultureInfo("EN-us");
Console.WriteLine("Cambiando a cultura de inglés de Estados Unidos tenemos: " + valor.ToString(culture.NumberFormat));
// Muestra: 16325.62

Existen objetos, que a pesar de tener un método de este tipo, la cadena que devuelven no contiene prácticamente nada de la información del objeto. Por ejemplo, si tenemos un DataTable y le invocamos el método ToString, probablemente la salida sea sólo que es una instancia del tipo de objeto DataTable.

Métodos Parse

Podríamos decir que las funciones Parse, son la funciones inversas a los métodos ToString. A diferencia de los primeros, de una cadena, son capaces de leer su contenido y plasmarlo en un tipo de dato concreto, por ejemplo, de cadena a entero.

En C existían unas cuantas funciones que hacían esa misma labor: atoi, atol…. Además de ser verdaderamente útiles en interfaces gráficos y web, recordad que los datos que introducen los usuarios suelen venir en formato cadena, por la propia constitución de este tipo de interfaces.

Además son verdaderamente útiles cuando tratamos con tipos de datos a los que no podemos hacer casting directamente, ya que la solución más práctica es hacer un ToString seguido de un Parse.

Veamos ejemplos:

string valor = "1";
int a = int.Parse(a);
Console.WriteLine("El valor de a es: " a.ToString());

Como podréis imaginar, si queremos pasar datos decimales con comas y puntos de tal manera o de tal otra, también deberemos usar en este punto la información cultural.

Nos vemos en la próxima entrega.

Entregas anteriores

F. Javier Carazo Gil

Cofundador de CODECTION, empresa especializada en WordPress, autor de un libro sobre WordPress (el primero en español) y multitud de artículos (en medios físicos y virtuales) sobre el tema. Participa en la comunidad WordPress de forma activa siendo parte del equipo organizador de la WordPress Meetup de Córdoba, dando charlas en diferentes WordCamp y siendo autor y coautor de multitud de plugins libres y premium para WordPress de gran éxito.

Ver comentarios

Entradas recientes

DeepSeek

2 días hace

Contacto

2 semanas hace

Smart-tv mute

2 semanas hace

STEAM OS

3 semanas hace

2025

4 semanas hace

El podcast de Linux Hispano – #072 – El hardware libre debe consolidarse como el software libre

https://www.youtube.com/embed/z-xGk9c_eOw Guionista y locutor: Manuel Ignacio López Quintero.Fecha de publicación: 31 de diciembre de 2024.

1 mes hace