2010-04-27 14 views
9

Tôi có đầu vào người dùng có thể chứa các giá trị nổi khác nhau: 3.06 HOẶC 3.06 Văn hóa chúng tôi là tiếng Pháp và do đó khi người dùng nhập 3.06 và tôi chạy float.tryParse trên giá trị này, nó không được chuyển đổi thành 3.06 thành biến mới (kiểu float)C# float.tryparse cho Văn hóa Pháp

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

Tôi chỉ cần thay thế số tiền được nhập từ giao diện người dùng từ "." để ",", nhưng có một cách duyên dáng/tốt hơn để làm điều này thông qua văn hóa? Cảm ơn

+1

Có vẻ như hợp lý -Tại nhất để ME để từ chối "3,06" đầu vào là hợp lệ. Ở Pháp (thậm chí bạn có thể nói, Châu Âu) "3,06" là một số hợp lệ và "3,06" đơn giản là không. Ứng dụng của bạn cũng có hỗ trợ các ngày theo định dạng sau "MM/DD/YYYY" hoặc bạn có muốn từ chối ngày có định dạng không hợp lệ không? Tôi nghĩ rằng sau này, và khá hợp lý như vậy. –

Trả lời

13

Bạn có thể sử dụng overload mà phải mất một nhà cung cấp định dạng. Bạn có thể đi qua một thông tin văn hóa Pháp:

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

Bạn có thể vượt qua nền văn hóa bên trong TryParse phương pháp:

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

Có nhưng làm cách nào để quyết định văn hóa nào cần chuyển vì giá trị giao diện người dùng có thể là "." Hoặc "," –

+0

Bạn cần yêu cầu người dùng (hoặc bằng cách nào đó xác định) ngôn ngữ họ đang ở. Hầu hết các hệ thống đều có cài đặt để xác định văn hóa hiện tại. Câu hỏi của bạn, sau đó, cách tốt nhất để đưa ra một hệ thống như vậy hoặc xác định văn hóa của khách hàng? – 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 
} 
Các vấn đề liên quan