Iré añadiendo pequeños fragmentos de código ( code snippets en ingles ) según me vaya encontrando con diferentes problemas que exijan alguna conversión o «truquito» para trabajar con números y cadenas de texto.
- Soportar el punto o la coma como carácter separador
Al parsear un float en .NET por defecto solo está soportado el uso de la coma ( , ) para separar entre la parte entera y la decimal, pero usando CultureInfo.InvariantCulture se modifica dicho comportamiento, pasando a ser el punto ( . ) el carácter utilizado para separar ambas partes, no soportándose en tal caso el uso de la coma. En si toca elegir entre utilizar la coma o el punto, lo que no es nada raro, porque no vas a tener un documento en el que se use uno u otro carácter indistintamente y de forma aleatoria, produciendo una gran confusión al lector, sino que se buscará siempre una homogeneidad en el formato.
string str = "0.25"; float num = float.Parse ( str, CultureInfo.InvariantCulture ); // 0.25f str = "0,33"; str = str.Replace ( ',', '.' ); if ( int.TryParse ( str, NumberStyles.Float, CultureInfo.InvariantCulture, out num ) ) num = 0f;
- Añadir el cero de la parte entera en números inferiores a uno
No es raro que el usuario introduzca cantidades menores a uno obviando la parte entera, el cero a la izquierda de la coma ( o punto ) y por evitar futuros problemas o ya sea simplemente por estética, no es difícil conseguir ese cero.
string str = ".25"; float num = float.Parse ( str, CultureInfo.InvariantCulture ); // 0.25f str = num.ToString (); // "0.25" str = ",25"; num = float.Parse ( str ); // 0,25f str = num.ToString (); // "0,25"
- Eliminar espaciado múltiple dejando el normal
Un espacio hace su función pero varios seguidos en muchos contextos no tienen sentido alguno y puede interesar quitar ese exceso de espaciado entre palabras, parámetros, etc… dejando únicamente el espaciado «normal». Una forma elegante de solucionarlo es utilizar una expresión regular que represente la búsqueda de uno o más ( + ) espacios en blanco ( \s ) consecutivos. Ya de paso en el fragmento de código aprovecho a eliminar los espacios en blanco que pueda haber en los extremos de la cadena.
string str = "Texto de ejemplo"; str = Regex.Replace ( str.Trim (), @"\s+", " " ); // "Texto de ejemplo"