2011-06-28 38 views
7

Tại sao double.TryParse() với các thiết lập này không phân tíchsố Parsing với hành vi lạ double.TryParse

double.TryParse("1.035,00", 
NumberStyles.AllowCurrencySymbol | NumberStyles.AllowLeadingWhite | NumberStyles.AllowTrailingWhite | 
NumberStyles.AllowDecimalPoint | NumberStyles.AllowLeadingSign, 
GlobalSettings.Instance.DefaultCulture, out price); 

nơi DefaultCulture là sl-SI (Slovenia), trong đó có các chấm . là biểu tượng chữ số nhóm và, như dấu thập phân . Số price vẫn là 0 sau khi phân tích cú pháp.

?

+0

TryParse trả về một 'bool' cho biết nếu phân tích giá trị thành công hay thất bại. Ví dụ của bạn, TryParse trả về 'false'. Vì vậy, nguyên nhân của 'price' là' 0' là chuỗi không thể được phân tích cú pháp. – dtb

+3

Tôi thấy lạ khi một số người bỏ phiếu gần do nội địa hoá. Nếu vấn đề là văn hóa thì nó sẽ ảnh hưởng đến nhiều nền văn hóa, tất cả những người sử dụng dấu phẩy là dấu phân cách thập phân, cả hai tiêu chuẩn ISO và biểu diễn được sử dụng ở hầu hết các quốc gia –

Trả lời

6

Bạn đang thiếu NumberStyles.AllowThousands:

double.TryParse("1.035,00", NumberStyles.AllowCurrencySymbol | 
          NumberStyles.AllowLeadingWhite | 
          NumberStyles.AllowTrailingWhite | 
          NumberStyles.AllowDecimalPoint | 
          NumberStyles.AllowLeadingSign | 
          NumberStyles.AllowThousands, 
          GlobalSettings.Instance.DefaultCulture, out price); 
+0

hoàn hảo, cảm ơn – mare

2

này làm việc cho tôi

double.TryParse("1.035,00", 
NumberStyles.Any, 
GlobalSettings.Instance.DefaultCulture, out price); 
+0

sẽ bất cứ ai khác tư vấn về cách sử dụng NumberStyles.Any in một ý nghĩa, nếu có bất kỳ vấn đề tiềm năng với nó? – mare

+1

Theo MSDN ** Cho biết tất cả các kiểu ngoại trừ AllowHexSpecifier đều được sử dụng. Đây là kiểu số tổng hợp. ** – V4Vendetta