2010-04-27 22 views
9

Şu andan itibaren float değerleri içerebilen bir kullanıcı girdim var: 3.06 OR 3,06 İçinde bulunduğumuz kültür Fransızca ve bu nedenle kullanıcı 3.06 girdik ve bir float.tryParse çalıştırdığımda Ben sadece gelen UI girilen miktarına yerini yapabilirsinizC# float.tryparse, Fransız Kültürü

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

bu değerin üzerinde yeni bir değişken içine 3.06 dönüştürülür almaz (tip şamandıra) "" "," ama bunu Kültür aracılığıyla yapmanın zarif/daha iyi bir yolu var mı? Teşekkür

+1

. Fransa'da (hatta Avrupa diyebilirsiniz) "3,06" geçerli bir sayıdır ve "3.06" sadece değildir. Başvurunuz aynı zamanda "AA/GG/YYYY" biçimindeki tarihleri ​​de destekliyor mu, yoksa geçersiz bir biçim almak için böyle bir tarihi reddediyor musunuz? Sonuncusu ve oldukça makul olduğunu düşünüyorum. –

cevap

13

Bir biçim sağlayıcı alır overload kullanabilirsiniz. Bir Fransız kültürü bilgi geçebilir: It "3.06" olarak geçerli girdi reddetmeye sonradır için -en azından makul görünüyor

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

Sen TryParse yöntemi içinde kültürü geçirebilirsiniz:

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

Evet, ancak UI değeri "." Olabileceği için hangi kültürün geçeceğine nasıl karar veririm. Veya "," –

+0

Kullanıcının (ya da başka bir yolla) hangi yerel konumda bulunduğunu sormanız gerekir. Çoğu sistemde, geçerli kültürü belirlemek için bir ayar vardır. Öyleyse soru, böyle bir sistemi tasarlamanın veya müşterinin kültürünü belirlemenin en iyi yolu mu? – 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 
}