Convertir un carácter que representa un dígito (0-9) a su equivalente entero es una tarea frecuente en C#. Este artículo explora cuatro métodos eficientes, destacando sus fortalezas y debilidades para ayudarlo a elegir el mejor enfoque para su escenario específico.
Tabla de contenido
Restar ‘0’
Este método explota el orden secuencial de los caracteres en ASCII y Unicode. Restar el carácter ‘0’ de un carácter dígito produce directamente su equivalente entero. Es conciso y altamente eficiente, pero limitado a dígitos ASCII (‘0’ a ‘9’).
using System;
public class CharToIntConversion
{
public static void Main(string[] args)
{
char digitChar = '3';
if (char.IsDigit(digitChar))
{
int intValue = digitChar - '0';
Console.WriteLine($"El valor entero de '{digitChar}' es: {intValue}");
}
else
{
Console.WriteLine($"'{digitChar}' no es un dígito.");
}
}
}
Usando char.GetNumericValue()
El método char.GetNumericValue()
ofrece una conversión robusta, manejando dígitos de varios rangos Unicode. Sin embargo, devuelve un double
, requiriendo un casting a int
, y devuelve -1 para caracteres no numéricos.
using System;
public class CharToIntConversion
{
public static void Main(string[] args)
{
char digitChar = '7';
double numericValue = char.GetNumericValue(digitChar);
if (numericValue != -1)
{
int intValue = (int)numericValue;
Console.WriteLine($"El valor entero de '{digitChar}' es: {intValue}");
}
else
{
Console.WriteLine($"'{digitChar}' no es un carácter numérico.");
}
}
}
Usando char.GetDecimalDigitValue()
Similar a GetNumericValue()
, pero específicamente para dígitos decimales (0-9). Devuelve un int
directamente y -1 si la entrada no es un dígito decimal, lo que lo hace eficiente y sencillo.
using System;
public class CharToIntConversion
{
public static void Main(string[] args)
{
char digitChar = '9';
int intValue = char.GetDecimalDigitValue(digitChar);
if (intValue != -1)
{
Console.WriteLine($"El valor entero de '{digitChar}' es: {intValue}");
}
else
{
Console.WriteLine($"'{digitChar}' no es un dígito decimal.");
}
}
}
Usando int.Parse()
int.Parse()
convierte una representación de cadena a un entero. Aunque aparentemente menos eficiente para caracteres individuales, es ventajoso cuando se manejan cadenas o se requiere un manejo robusto de errores. Lanza una FormatException
si la entrada no es un entero válido.
using System;
public class CharToIntConversion
{
public static void Main(string[] args)
{
char digitChar = '5';
try
{
int intValue = int.Parse(digitChar.ToString());
Console.WriteLine($"El valor entero de '{digitChar}' es: {intValue}");
}
catch (FormatException)
{
Console.WriteLine($"'{digitChar}' no es un entero válido.");
}
}
}
El método óptimo depende de su contexto. Para dígitos ASCII simples, restar ‘0’ es lo más rápido. Para un soporte Unicode más amplio y manejo de errores, GetNumericValue()
o GetDecimalDigitValue()
son preferibles. int.Parse()
ofrece el manejo de errores más sólido, pero es menos eficiente para caracteres individuales. Siempre maneje los posibles errores de manera adecuada.