2012-04-04 42 views
12

Tôi đang có một hàm nhận các tham số chuỗi và chuyển đổi chúng thành số nguyên.
Để chuyển đổi an toàn int.TryParse() được sử dụng.int.TryParse() trả về false cho "#. ##"

public IEnumerable<object> ReportView(string param1, string param2) 
{ 
    int storeId = int.TryParse(param1, out storeId) ? storeId : 0; 
    int titleId = int.TryParse(param2, out titleId) ? titleId : 0; 
    IEnumerable<object> detailView = new Report().GetData(storeId, titleId); 
    return detailView; 
} 

Chức năng gọi ReportView (“2”,”4”) -> int.TryParse phân tích thành công số
Chức năng gọi ReportView (‘2,00’,” 4,00”) -> int.TryParse thất bại để phân tích cú pháp các số

Tại sao? Bất kỳ ý tưởng?

@Update
Xin lỗi, ý kiến ​​của tôi đã sai. Tôi mới vào C#, tôi nghĩ Int.TryParse() sẽ trả về một phần không tách rời và bỏ qua các số thập phân. Nhưng nó sẽ không, ngay cả Convert.ToInt32 ("chuỗi")
Nhờ tất cả.

+1

Bạn cũng nên chỉ định văn hóa. – CodesInChaos

+4

Tôi không thấy lý do tại sao điều này bị giảm giá. Câu hỏi rõ ràng là câu hỏi của người mới bắt đầu, nhưng rõ ràng và được xây dựng hợp lý. –

+1

@moguzalp Mọi người có nên bị downvoted vì không biết điều gì đó khi họ đặt câu hỏi không? –

Trả lời

6
public IEnumerable<object> ReportView(string param1, string param2) 
{ 
    decimal tmp; 
    int storeId = decimal.TryParse(param1, out tmp) ? (int)tmp : 0; 
    int titleId = decimal.TryParse(param2, out tmp) ? (int)tmp : 0; 
    IEnumerable<object> detailView = new Report().GetData(storeId, titleId); 
    return detailView; 
} 

Ở trên sẽ hoạt động với chuỗi Integer hoặc Decimal. Hãy nhớ rằng các chuỗi có dạng "2.123" sẽ dẫn đến giá trị Integer của 2 được trả về.

5

int.TryParse sẽ không cố phân tích cú pháp chuỗi và chuyển đổi thành số nguyên trong trường hợp. Bạn cần sử dụng decimal.TryParse cho chuỗi số thập phân.

2

2.00 và 4.00 không thuộc loại dữ liệu Integer - đó là lý do. Nếu bạn muốn những điều đó là đúng, hãy thử double.TryParse() hoặc decimal.TryParse()

1

Không phân tích cú pháp vì số thập phân không phải là số nguyên.

1

Vì "2.00" là số thập phân, không phải là số nguyên.

2

cũng 2.00 là số thập phân, không phải là số int trong mắt máy tính.

3

2.00 và 4.00 không phải là số nguyên. Nếu bạn muốn phân tích các số thập phân, hãy sử dụng decimal.TryParse() hoặc double.TryParse(), sau đó cắt bớt chúng hoặc kiểm tra một giá trị không có giá trị.

1

Int32 (int) chỉ có thể chứa các giá trị tích phân; do đó các hàm Int32 Parse/TryParse không thể phân tích chuỗi bằng số thập phân. Nếu giá trị chuỗi của bạn có thể chứa số thập phân nhưng được dùng để biểu diễn số nguyên, hãy sử dụng Decimal.TryParse và sau đó truyền.

2

Để máy tính "2.00" là dấu phẩy/số thập phân, không phải là số nguyên. Thay vì làm decimal.TryParse() bạn có thể xử lý trước chuỗi bằng cách loại bỏ các số 0 và sau đó thực hiện int.TryParse(). Vì vậy, nếu bạn có "2.00", bạn tiếp tục kiểm tra (và thả) ký tự cuối cùng của chuỗi cho đến khi bạn đạt đến "." (thập phân). Nếu nó là "0" hoặc "." bạn có thể thả nó. Cuối cùng, bạn sẽ chỉ với "2".