2010-04-27 32 views
9

Ich habe eine Benutzereingabe, die float-Werte enthalten kann: 3.06 OR 3,06 Die Kultur, in der wir sind, ist Französisch und wenn der Benutzer 3.06 eingibt und wenn ich also float.tryParse ausführe über diesen Wert auf 3,06 in eine neue Variable nicht (Typ float)C# float.tryparse für französische Kultur

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

ich einfach ein Ersatz auf die Menge von UI konvertiert bekommt von eingegebenen tun können „“ zu ",", aber gibt es einen schöneren/besseren Weg, dies durch die Kultur zu tun? Dank

+1

Es scheint vernünftig -mindestens me- „3,06“ als gültige Eingabe zu verwerfen. In Frankreich (man könnte sogar sagen, Europa) "3,06" ist eine gültige Nummer und "3.06" ist einfach nicht. Unterstützt Ihre Anwendung auch Datumsangaben im folgenden Format "MM/TT/JJJJ" oder do-you/wrote - Sie weisen ein solches Datum für ein ungültiges Format zurück? Ich denke, Letzteres, und ziemlich vernünftig. –

Antwort

13

Sie können die overload verwenden, die ein Format Anbieter nimmt. Sie können durch eine Französisch Kultur Info passieren:

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

Sie können Kultur innerhalb TryParse Methode übergeben:

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

Ja, aber wie entscheide ich, welche Kultur übergeben werden soll, da der UI-Wert entweder "." Oder "," –

+0

Sie müssen den Benutzer fragen (oder auf andere Weise feststellen), in welchem ​​Gebietsschema er sich befindet. Die meisten Systeme haben eine Einstellung zur Bestimmung der aktuellen Kultur. Ist Ihre Frage also der beste Weg, ein solches System zu entwickeln oder die Kultur des Kunden zu bestimmen? – 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 
}