2010-03-05 29 views
5

Khi tôi cố gắng để chuyển đổi một chuỗi để một giá trị số với Parse hoặc TryParse hoặc Convert.ChangeType, tôi không thể quản lý de ngàn tách vì nó được định nghĩa trong hệ thống:String để chuyển đổi số và tách nhóm

nếu tôi nhập:

var d = double.Parse("1,234", CultureInfo.CurrentUICulture); 

nó không trả lại 1234.

Nếu tôi muốn sử dụng tách nhóm, tôi phải gõ:

var d = double.Parse("1,234", NumberStyles.Number, CultureInfo.CurrentUICulture); 

Lần này, kết quả là kết quả mong đợi.

Nhưng, tôi không muốn ép buộc sử dụng dấu phân tách nghìn, tôi chỉ muốn sử dụng nó nếu hệ thống chỉ định nó trong cài đặt toàn cầu hóa. Có cách nào để biết nếu tách được sử dụng (tôi biết rằng tôi có thể đọc các phân nhóm trong CultureInfo.CurrentUICulture.NumberFormat.NumberGroupSeparator)

Cheers Loic

Trả lời

0

Bạn luôn có thể sử dụng dòng thứ hai bạn sử dụng

var d = double.Parse("1,234", NumberStyles.Number, CultureInfo.CurrentUICulture); 

vì nó sẽ chuyển đổi chính xác 1234 cũng như 1,234 và nó sẽ bao gồm 1.234 trên các hệ thống sử dụng '.' như nhóm tách

+0

Có, nhưng trên thực tế, tôi muốn sử dụng hàm Convert.ChangeType để tạo chuỗi chung thành công cụ chuyển đổi số và cung cấp chuỗi đó dưới dạng tiện ích chuỗi. Nhưng Convert.ChangeType không có quá tải với tham số NumberStyles. Nó chỉ cho phép tham số IFormatProvider. Và bằng cách này, những gì tôi không hiểu là lý do tại sao thiết lập defaut cho Parse không đáp ứng các thiết lập quốc tế của hệ thống của tôi, nơi sử dụng phân tách nhóm được giải quyết. – Loic

2

Number (trong đó bao gồm AllowThousands) không nhu cầu dấu phẩy - nó chỉ đơn giản phép nó. Vì vậy, bạn có thể sử dụng Number có hoặc không có dấu phẩy. Hoặc sử dụng Any hoặc AllowThousands.

Lưu ý rằng "dấu phẩy" có thể thay thế bằng "dấu tách hàng nghìn" - nghĩa là trong một số ký tự Eurupe, nó có thể thay đổi (khoảng thời gian, vv). Nếu bạn có nghĩa là "dấu phẩy là hàng nghìn" thì hãy sử dụng văn bản cố định (chẳng hạn như InvariantCulture).

+0

Tôi đồng ý. Nhưng vấn đề của tôi là (khẳng định rằng văn hóa là 'fr-FR' và nghìn dấu tách là một ký tự khoảng trắng), tại sao: Dòng sau hoạt động: double d = (double) Convert.ChangeType ("1 234", typeof (đôi), _culture); Trong khi dòng sau ném một ngoại lệ định dạng? int i = (int) Chuyển đổi.ChangeType ("1 234", typeof (int), _culture); – Loic

0

Bạn nên phân tích cú pháp đầu vào của người dùng bằng cách sử dụng CurrentCulture chứ không phải CurrentUICulture.

Thuộc tính CurrentUICulture là ngôn ngữ mà giao diện người dùng được hiển thị và CurrentCulture đến ngôn ngữ hiện tại được chỉ định trong Windows. Bằng cách này, người dùng làm việc với ứng dụng cung cấp giao diện người dùng được dịch sang tiếng Anh (CurrentUICulture) vẫn có thể xem/nhập, ví dụ: ngày và số được định dạng làm ngôn ngữ mà anh ta đặt trong Windows (CurrentCulture).

+0

Xin chào, cảm ơn sự giúp đỡ của bạn. Ứng dụng của tôi cho phép người dùng thay đổi ngôn ngữ làm thời gian chạy (chúng tôi đang cung cấp 7 ngôn ngữ khác nhau). Chúng tôi thay đổi CurrentUICulture và CurrentCulture khi người dùng chọn một ngôn ngữ. Chúng tôi muốn người dùng xem/nhập ngày và số làm ngôn ngữ được chọn và không phải là ngôn ngữ được đặt trong hệ thống. – Loic

Các vấn đề liên quan