2009-08-20 60 views
9

thể trùng lặp:
how can I convert String to Int ?Chuyển đổi String để Integer

Hi,

Tôi có vấn đề sau đây chuyển đổi chuỗi thành một số nguyên:

string str = line.Substring(0,1); 

//This picks an integer at offset 0 from string 'line' 

Bây giờ chuỗi str chứa một số nguyên duy nhất trong đó. Tôi đang làm như sau:

int i = Convert.ToInt32(str); 

tôi phải in số nguyên nếu tôi viết câu đúng sau?

Console.WriteLine(i); 

Nó biên dịch mà không cần bất kỳ lỗi nhưng cung cấp cho các lỗi sau trên runtime:

Một ngoại lệ unhandled của loại 'System.FormatException' xảy ra ở mscorlib.dll

thông tin bổ sung: string Input không ở định dạng đúng.

Bất kỳ trợ giúp nào?

+0

Gắn thẻ thẻ này bằng ngôn ngữ bạn đang sử dụng. – sal

+0

Nếu bạn có thể cung cấp giá trị chuỗi bên trong biến dòng, nó có thể dễ dàng hơn nhiều để phát hiện lỗi. – rahul

+0

Đây là bản sao nhiều lần, vui lòng xem http://stackoverflow.com/questions/1019793/how-can-i-convert-string-to-int, http://stackoverflow.com/questions/952469/convert -string-to-int, http://stackoverflow.com/questions/887586/convert-string-to-int. –

Trả lời

18

Thay vì sử dụng Convert.ToInt32(string), bạn nên cân nhắc sử dụng Int32.TryParse(string, out int) để thay thế. Các phương thức TryParse có sẵn để giúp giải quyết đầu vào do người dùng cung cấp theo cách an toàn hơn. Nguyên nhân có khả năng nhất gây ra lỗi của bạn là chuỗi con bạn đang quay trở lại có biểu diễn chuỗi không hợp lệ của một giá trị số nguyên.

string str = line.Substring(0,1); 
int i = -1; 
if (Int32.TryParse(str, out i)) 
{ 
    Console.WriteLine(i); 
} 
+0

cảm ơn cho đoạn mã..Tôi sẽ thử nó vào ngày mai vì tôi không có quyền truy cập vào máy trạm của tôi ngay bây giờ..sẽ cập nhật đầu ra ở đây vào ngày mai .. bất cứ điều gì nó có thể là..thanks một lần nữa – zack

+0

lý do cho việc thiết lập là gì i đến -1 trong ví dụ được cung cấp? Nó gợi ý với tôi rằng sau khi phân tích cú pháp không thành công, bạn có thể thử nghiệm -1 theo cách nào đó nhưng TryParse đặt i thành 0 nếu phân tích cú pháp không thành công –

0

Hoàn toàn có thể có một số khoảng trống trong đó. Hãy thử chạy một cái gì đó giống như trim() (Tôi không chắc chắn những gì bạn đang ở trong ngôn ngữ) mà sẽ tước không gian màu trắng. Ngoài ra, hãy thử in ra chuỗi để đảm bảo bạn thực sự có phần phù hợp của nó. Tất cả chúng ta đã làm điều đó :)

+0

Vâng, khi tôi xuất chuỗi trên giao diện điều khiển bằng Console.WriteLine (str) nó in ra một biểu tượng (cười) và kể từ khi tôi cho số là 1 Tôi không nghĩ rằng có thể có bất kỳ ký tự khác ngoại trừ số nguyên (đó là nhận được in ra như một cười). Tôi đang sử dụng C# trong visual Studio 2005 bằng cách này. – zack

+1

Nếu bàn điều khiển không thể in nó như bất kỳ số nguyên nào, thì tôi đoán nó không phải là số nguyên. Tôi có thể sai ở đây, nhưng sự hiểu biết của tôi về phương pháp này là để chuyển đổi một chuỗi đại diện của một số nguyên, nói "1234" vào đại diện số nguyên datatype của 1234, ví dụ như một cái gì đó bạn có thể làm toán với. Đó có phải là những gì bạn đang cố gắng làm không? –

1

FormatException

giá trị không bao gồm một tùy chọn dấu hiệu tiếp theo là một chuỗi các chữ số (0 đến 9).

Ngoại lệ được ném khi định dạng của đối số không đáp ứng thông số kỹ thuật tham số của phương thức được gọi là .

Bạn có thể sử dụng Int32.TryParse nếu bạn không muốn tạo ngoại lệ như thế này.

Int32.TryParse: Chuyển đổi chuỗi đại diện của một số đến 32-bit đã ký số nguyên tương đương của nó. Giá trị trả lại cho biết liệu hoạt động có thành công hay không.

0

Có thể đầu vào của bạn là không phải là định dạng hợp lệ. Hãy thử thay vào đó. Nếu số không hợp lệ, nó sẽ xuất ra một lỗi.

Hãy nhớ rằng chuỗi phải bao gồm một dấu tùy chọn theo sau là một số.

string line = "23"; // or whatever. 
string str = line.Substring(0,1); 
int i = 0; 
if (Int32.TryParse(str, out i)) { 
    Console.WriteLine(i); 
} else { 
    Console.WriteLine ("Error converting '" + line + "', '" + str + "'."); 
} 

Một điều bạn có thể thấy là người dùng nhập "-1" ví dụ. Nếu bạn thực hiện substring(0,1), bạn sẽ chỉ nhận được "-" không thực sự hợp lệ.

0

Bạn có chắc chắn rằng giá trị được trả về trong str là int, đặt điểm gỡ lỗi nếu bạn sử dụng studio trực quan. Ive có một cảm giác vấn đề của bạn có thể rằng bạn không thực sự trở về một số nguyên. Hãy thử:

line.Trim().Substring(0,1); 

Điều này sẽ xóa mọi khoảng trắng.

+0

Trim() sẽ chỉ xóa khoảng trắng từ đầu và cuối chuỗi, vì vậy đây không phải là đảm bảo để giải quyết vấn đề tùy thuộc vào những gì chuỗi gốc chứa. –

+0

Có, nhưng dưới dạng chuỗi con là (0,1), đây luôn là điểm bắt đầu và có thể kết thúc. – StarSignLeo

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