2011-11-29 16 views
11

Tại sao:Tại sao dấu phẩy hoạt động khác trong int.Parse() và decimal.Parse() với InvariantCulture?

decimal.Parse("1,2,3,45", CultureInfo.InvariantCulture) 

trở lại một số thập phân của 12345, tuy nhiên:

int.Parse("1,2,3,45", CultureInfo.InvariantCulture) 

ném một ngoại lệ? Tôi mong đợi các dấu phẩy được xử lý giống nhau cho cùng một nền văn hóa. Nếu decimal.Parse trả về 12345, tại sao không int.Parse cũng trả về 12345?

Trả lời

15

See NumberStyles

Giá trị mặc định NumberStyles cho int là Integer:

Integer Chỉ ra rằng phong cách AllowLeadingWhite, AllowTrailingWhite, và AllowLeadingSign được sử dụng. Đây là kiểu số tổng hợp.

So với Number (sử dụng cho decimal):

Số Chỉ ra rằng phong cách AllowLeadingWhite, AllowTrailingWhite, AllowLeadingSign, AllowTrailingSign, AllowDecimalPoint, và AllowThousands được sử dụng. Đây là kiểu số tổng hợp.

Nếu bạn muốn biết thêm, sử dụng quá tải mà chấp nhận NumberStyles, và cung cấp (ví dụ) NumberStyles.Number hoặc NumberStyles.Any:

int i = int.Parse("1,2,3,45", NumberStyles.Number, CultureInfo.InvariantCulture); 
+0

Thú vị - Tôi đã không nhận ra họ đã sử dụng phong cách khác nhau. Tôi có thể hiểu một số trong số họ (ví dụ: AllowDecimalPoint), nhưng có vẻ lạ rằng AllowThousands là khác nhau giữa hai. Cảm ơn! –

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