punto - separador de miles y decimales c#
¿Convierte Float que tiene punto en lugar de coma? (4)
Tengo datos de una tabla en una base de datos (cadena) que contienen texto y precio. Extraigo el precio de los datos, pero mi problema es que alguna vez puedo Convertirlo para flotar y en algún momento no.
Me he dado cuenta que :
Convert.ToSingle(m.Groups[1].Value);
Funciona, pero no siempre, porque en algún momento el problema es el período (requiere una coma). ¿Que puedo hacer? He intentado reemplazar el ".", Por "," pero en algún momento en otra PC es un período que se requiere.
O solicite este formato numérico específico explícitamente:
System.Globalization.NumberFormatInfo nf
= new System.Globalization.NumberFormatInfo ( )
{
NumberGroupSeparator = "."
};
float f = float.Parse ( "5.34534", nf );
Como otros han dicho:
Convert.ToSingle(m.Groups[1].Value, CultureInfo.InvariantCulture);
También debe asegurarse de usar InvariantCulture
cuando escribe en la base de datos. (Sería incluso mejor si guardó los datos en una columna con su tipo de datos nativo, pero estoy divagando ...)
Si no tiene acceso de escritura a la base de datos, lo primero que debe hacer es intentar convencer a las fuentes de los datos de que utilicen la cultura invariable. Si el usuario ingresa los datos, puede hacer algo como:
float f = float.Parse(input);
string toDb = f.ToString(CultureInfo.InvariantCulture);
Y luego desde el otro lado:
float f = float.Parse(fromDb, CultureInfo.InvariantCulture);
string toOutput = f.ToString();
Aunque si puede convencerlos de que probablemente sea mejor, como dice Lette, convencerlos de usar el tipo de datos nativo.
También me gustaría, como se puede ver en los fragmentos anteriores, recomendar el uso de float. Basta con Convert por una variedad de razones, pero la más importante es la posibilidad de usar TryParse:
float f;
if (!float.TryParse(input, out f))
{
// ERROR
}
Usted tiene este problema porque la conversión verifica el idioma de su PC. Tendrá que hacer algo como:
Convert.ToSingle(m.Groups[1].Value, CultureInfo.InvariantCulture.NumberFormat);
De esta forma, no verificará el idioma de la PC. Puede encontrar más información sobre InvariantCulture de MSDN. Tengo algo similar en un proyecto y mi conversión funciona.