2010-04-27 12 views
9

Tengo una entrada de usuario que puede contener valores flotantes que van desde: 3.06 O 3,06 La cultura en la que estamos es en francés y, por lo tanto, cuando el usuario ingresa 3.06 y ejecuto float.tryParse sobre este valor no quede convertida a 3,06 en una nueva variable (tipo float)C# float.tryparse para cultura francesa

// inputUsedAmount.Value from UI is : 3.06 
float usedAmount = 0.0f; 
float.TryParse(inputUsedAmount.Value, out usedAmount); 
// returns false 

puedo simplemente hacer una reemplazar en la cantidad introducida desde la interfaz de usuario de "". a ",", pero ¿hay alguna manera agraciada/mejor de hacer esto a través de la Cultura? Gracias

+1

Parece razonable -al menos a mí- a rechazar "3,06" de entrada como válido. En Francia (incluso se podría decir, Europa) "3,06" es un número válido y "3.06" simplemente no lo es. ¿Tu aplicación también admite fechas en el siguiente formato "MM/DD/AAAA" o "¿quieres?", ¿Rechazaría esa fecha por tener un formato no válido? Creo que esto último, y bastante razonablemente. –

Respuesta

13

Puede utilizar el overload que toma un proveedor de formato. Puede pasar a través de una información de la cultura francesa:

string value; 
NumberStyles style; 
CultureInfo culture; 
double number; 

value = "1345,978"; 
style = NumberStyles.AllowDecimalPoint; 
culture = CultureInfo.CreateSpecificCulture("fr-FR"); 
if (Double.TryParse(value, style, culture, out number)) 
    Console.WriteLine("Converted '{0}' to {1}.", value, number); 
else 
    Console.WriteLine("Unable to convert '{0}'.", value); 
// Displays: 
//  Converted '1345,978' to 1345.978. 
1

Puede pasar dentro de la cultura TryParse método:

public static bool TryParse(string s, NumberStyles style, IFormatProvider provider, out float result); 
+0

Sí, pero ¿cómo decido qué cultura aprobar ya que el valor de la IU puede ser "." O "," –

+0

Debe preguntarle al usuario (o de alguna otra forma determinar) en qué localidad se encuentra. La mayoría de los sistemas tienen una configuración para determinar la cultura actual. ¿Es su pregunta, entonces, la mejor manera de diseñar un sistema de este tipo o determinar la cultura del cliente? – BlueMonkMN

4
float usedAmount; 

// try parsing with "fr-FR" first 
bool success = float.TryParse(inputUsedAmount.Value, 
           NumberStyles.Float | NumberStyles.AllowThousands, 
           CultureInfo.GetCultureInfo("fr-FR"), 
           out usedAmount); 

if (!success) 
{ 
    // parsing with "fr-FR" failed so try parsing with InvariantCulture 
    success = float.TryParse(inputUsedAmount.Value, 
          NumberStyles.Float | NumberStyles.AllowThousands, 
          CultureInfo.InvariantCulture, 
          out usedAmount); 
} 

if (!success) 
{ 
    // parsing failed with both "fr-FR" and InvariantCulture 
} 
Cuestiones relacionadas