2010-07-02 8 views
5

Trên một máy tính Windows tại Nhật Bản, dòng này của C# ném một ngoại lệ định dạng:C# không phân tích NaN như một đôi

double d = double.Parse("NaN"); 

Dòng này thực hiện tốt trên máy tính của tôi ở Mỹ

Don' t biết nơi để bắt đầu xử lý sự cố này. Có suy nghĩ gì không?

Cảm ơn trước, Jim

Trả lời

7

Tôi hiểu vấn đề là gì. Hãy thử sử dụng nhà cung cấp định dạng bất biến.

double d = double.Parse("NaN", CultureInfo.InvariantCulture); 
+0

Tôi có thể không cười khúc khích như một đứa trẻ khi tôi sử dụng 'double d;'. – ChaosPandion

+0

Tôi sẽ gửi cho người dùng thử nghiệm này. Nếu nó thành công, điều này có nghĩa là gì? Rằng họ có một số loại bản địa hóa tiếng Nhật được bật trong Windows? –

+0

@Jim - Đó chính là ý nghĩa của nó. – ChaosPandion

-3

Trước tiên, bạn nên xác định giá trị gấp đôi cho "NaN". Dù sao, phân tích chuỗi định dạng số không sẽ gây ra System.FormatException, bạn nên bắt nó và đặt giá trị kép theo cách thủ công.

double x; 
string foo = "NaN"; 
try 
{ 
    x = double.Parse(foo); 
} 
catch 
{ 
    x = 0.0; 
} 
+1

Thực tế 'TryParse' là phương pháp ưu tiên vì nó không dựa vào ngoại lệ cho luồng điều khiển. – ChaosPandion

+1

Nhưng biến cần được khởi tạo thành Double.NaN. Giá trị này tồn tại trong một tệp đang khởi tạo gấp đôi. –