Làm cách nào để chuyển đổi String thành Int?


638

Tôi có một TextBoxD1.Textvà tôi muốn chuyển đổi nó thành một intđể lưu trữ nó trong cơ sở dữ liệu.

Tôi có thể làm cái này như thế nào?

Câu trả lời:


1038

Thử cái này:

int x = Int32.Parse(TextBoxD1.Text);

hoặc tốt hơn:

int x = 0;

Int32.TryParse(TextBoxD1.Text, out x);

Ngoài ra, vì Int32.TryParsetrả về nên boolbạn có thể sử dụng giá trị trả về của nó để đưa ra quyết định về kết quả của nỗ lực phân tích cú pháp:

int x = 0;

if (Int32.TryParse(TextBoxD1.Text, out x))
{
    // you know that the parsing attempt
    // was successful
}

Nếu bạn tò mò, sự khác biệt giữa ParseTryParseđược tóm tắt tốt nhất như thế này:

Phương thức TryPude giống như phương thức Parse, ngoại trừ phương thức TryPude không ném ngoại lệ nếu chuyển đổi không thành công. Nó loại bỏ nhu cầu sử dụng xử lý ngoại lệ để kiểm tra FormatException trong trường hợp s không hợp lệ và không thể được phân tích thành công. - MSDN


3
Nếu số nguyên là 64 bit, hoặc trông giống như "aslkdlksadjsd" thì sao? Điều này vẫn an toàn?
Jonny

6
@Jonny Int64.Parse(). Nếu đầu vào không phải là int, thì bạn sẽ nhận được một lệnh thực thi và theo dõi ngăn xếp với Int64.Parse, hoặc boolean Falsevới Int64.TryParse(), vì vậy bạn cần một câu lệnh if, như thế nào if (Int32.TryParse(TextBoxD1.Text, out x)) {}.

1
Bạn cũng có thể thử khởi tạo biến trong TryPude nếu nó chỉ được sử dụng trong điều kiện thành công. ví dụ: Int32.TryPude (TextBoxD1.Text, out int x))
Simplysiby

5
Có thể điều này là vô cùng rõ ràng đối với những người khác, nhưng đối với những người không chuyên nghiệp, những gì 'out x' làm được đặt giá trị của x thành chuỗi-cast-as-số nguyên, nếu quá trình truyền thành công. Tức là trong trường hợp này, x = 0 nếu chuỗi có bất kỳ ký tự không nguyên nào, hoặc x = giá trị của chuỗi dưới dạng số nguyên khác. Vì vậy, điều gọn gàng là đây là một biểu thức ngắn cho bạn biết việc truyền có thành công hay không, VÀ lưu trữ số nguyên cast trong một biến cùng một lúc. Rõ ràng là bạn thường muốn tiếp tục dòng trên với 'other {// chuỗi được phân tích cú pháp không phải là số nguyên, do đó, một số mã để xử lý tình huống này}'
Will Croxford

@Roberto ok, nhưng có thể người dùng (do nhầm lẫn hoặc cố ý) gõ giá trị "aslkdlksadjsd" bên trong hộp văn bản! Vì vậy, chương trình của chúng tôi có nên sụp đổ?
S.Serpooshan

55
Convert.ToInt32( TextBoxD1.Text );

Sử dụng điều này nếu bạn cảm thấy tự tin rằng nội dung của hộp văn bản là hợp lệ int. Một lựa chọn an toàn hơn là

int val = 0;
Int32.TryParse( TextBoxD1.Text, out val );

Điều này sẽ cung cấp cho bạn một số giá trị mặc định bạn có thể sử dụng. Int32.TryParsecũng trả về giá trị Boolean cho biết liệu nó có thể phân tích cú pháp hay không, do đó bạn thậm chí có thể sử dụng nó làm điều kiện của một ifcâu lệnh.

if( Int32.TryParse( TextBoxD1.Text, out val ){
  DoSomething(..);
} else {
  HandleBadInput(..);
}

-1 RE. "Điều này sẽ cung cấp cho bạn một số giá trị mặc định mà bạn có thể sử dụng." Nếu bạn có nghĩa là val, mong đợi sự cố: "Tham số này được thông qua chưa được khởi tạo; mọi giá trị ban đầu được cung cấp trong kết quả sẽ bị ghi đè." [Tham khảo docs.microsoft.com/en-us/dotnet/api/, ]
Zeek2

6
10 năm trước tôi xin lỗi.
Babak Naffas

37
int.TryParse()

Nó sẽ không ném nếu văn bản không phải là số.


Điều này là tốt hơn so với hai người kia. Đầu vào của người dùng có thể là định dạng sai. Cái này hiệu quả hơn việc sử dụng xử lý ngoại lệ như những cái khác yêu cầu.
Chú

Chính xác. Nó trả về false nếu chuyển đổi không thành công.
n8wrl

21
int myInt = int.Parse(TextBoxD1.Text)

Một cách khác sẽ là:

bool isConvertible = false;
int myInt = 0;

isConvertible = int.TryParse(TextBoxD1.Text, out myInt);

Sự khác biệt giữa hai là cái đầu tiên sẽ đưa ra một ngoại lệ nếu giá trị trong hộp văn bản của bạn không thể được chuyển đổi, trong khi cái thứ hai sẽ trả về sai.


Biến boolean ở trên rất hữu ích, chúng tôi đang sử dụng giá trị được chuyển đổi cho comaprison, giả sử trong mệnh đề if. code int NumericJL; bool isNum = int.TryPude (nomeeJobBand, out NumericJL); if (isNum) // JL được giữ lại có thể chuyển sang int rồi đi trước để so sánh {if (! (NumericJL> = 6)) {// Nominate} //
other

16

Bạn cần phân tích chuỗi và bạn cũng cần đảm bảo rằng chuỗi đó thực sự ở định dạng của một số nguyên.

Cách dễ nhất là đây:

int parsedInt = 0;
if (int.TryParse(TextBoxD1.Text, out parsedInt))
{
   // Code for if the string was valid
}
else
{
   // Code for if the string was invalid
}

14

Hãy cẩn thận khi sử dụng Convert.ToInt32 () trên char!
Nó sẽ trả về mã UTF-16 của nhân vật!

Nếu bạn chỉ truy cập chuỗi ở một vị trí nhất định bằng [i]toán tử lập chỉ mục, nó sẽ trả về a charchứ không phải a string!

String input = "123678";
                    ^
                    |
int indexOfSeven =  4;

int x = Convert.ToInt32(input[indexOfSeven]);             // Returns 55

int x = Convert.ToInt32(input[indexOfSeven].toString());  // Returns 7

11
int x = 0;
int.TryParse(TextBoxD1.Text, out x);

Câu lệnh TryPude trả về một boolean đại diện cho việc phân tích cú pháp có thành công hay không. Nếu thành công, giá trị được phân tích cú pháp sẽ được lưu vào tham số thứ hai.

Xem Phương thức Int32.TryPude (Chuỗi, Int32) để biết thêm thông tin chi tiết.



10

Mặc dù đã có nhiều giải pháp ở đây mô tả int.Parse, nhưng vẫn còn thiếu một điều quan trọng trong tất cả các câu trả lời. Thông thường, biểu diễn chuỗi của các giá trị số khác nhau theo văn hóa. Các yếu tố của chuỗi số như ký hiệu tiền tệ, dấu tách nhóm (hoặc hàng nghìn) và dấu tách thập phân đều thay đổi theo văn hóa.

Nếu bạn muốn tạo một cách mạnh mẽ để phân tích một chuỗi thành một số nguyên, thì điều quan trọng là phải tính đến thông tin văn hóa. Nếu bạn không, cài đặt văn hóa hiện tại sẽ được sử dụng. Điều đó có thể mang đến cho người dùng một bất ngờ khá khó chịu - hoặc thậm chí tệ hơn, nếu bạn phân tích định dạng tệp. Nếu bạn chỉ muốn phân tích tiếng Anh, tốt nhất chỉ cần làm cho nó rõ ràng, bằng cách chỉ định cài đặt văn hóa sẽ sử dụng:

var culture = CultureInfo.GetCulture("en-US");
int result = 0;
if (int.TryParse(myString, NumberStyles.Integer, culture, out result))
{
    // use result...
}

Để biết thêm thông tin, hãy đọc trên CultureInfo, cụ thể là NumberFormatInfo trên MSDN.


8

Bạn có thể viết phương thức mở rộng của riêng bạn

public static class IntegerExtensions
{
    public static int ParseInt(this string value, int defaultValue = 0)
    {
        int parsedValue;
        if (int.TryParse(value, out parsedValue))
        {
            return parsedValue;
        }

        return defaultValue;
    }

    public static int? ParseNullableInt(this string value)
    {
        if (string.IsNullOrEmpty(value))
        {
            return null;
        }

        return value.ParseInt();
    }
}

Và bất cứ nơi nào trong mã chỉ cần gọi

int myNumber = someString.ParseInt(); // Returns value or 0
int age = someString.ParseInt(18); // With default value 18
int? userId = someString.ParseNullableInt(); // Returns value or null

Trong trường hợp cụ thể này

int yourValue = TextBoxD1.Text.ParseInt();

Không nên gọi lớp StringExtensionsthay vì IntegerExtensions, vì các phương thức mở rộng này hoạt động trên stringvà không phải trên int?
Shiva

7

Như đã giải thích trong tài liệu TryPude , TryPude () trả về Boolean cho biết số đã hợp lệ được tìm thấy:

bool success = Int32.TryParse(TextBoxD1.Text, out val);

if (success)
{
    // Put val in database
}
else
{
    // Handle the case that the string doesn't contain a valid number
}


6

Bạn có thể sử dụng một trong hai

int i = Convert.ToInt32(TextBoxD1.Text);

hoặc là

int i = int.Parse(TextBoxD1.Text);

Điều này khác với câu trả lời trước như thế nào?
Peter Mortensen

5
//May be quite some time ago but I just want throw in some line for any one who may still need it

int intValue;
string strValue = "2021";

try
{
    intValue = Convert.ToInt32(strValue);
}
catch
{
    //Default Value if conversion fails OR return specified error
    // Example 
    intValue = 2000;
}

Mặc định trong trường hợp này sẽ không phải là một ý tưởng tốt. Nếu tất cả mặc định là bắt buộc, tôi khuyên bạn nên trả về 0.
Prageeth Saravanan

5

Bạn có thể chuyển đổi một chuỗi thành int trong C # bằng cách sử dụng:

Chức năng của lớp chuyển đổi tức là Convert.ToInt16(), Convert.ToInt32(), Convert.ToInt64()hoặc bằng cách sử dụng ParseTryParsechức năng. Ví dụ được đưa ra ở đây .


Điều này khác với câu trả lời trước như thế nào?
Peter Mortensen

4

Bạn cũng có thể sử dụng một phương thức mở rộng , vì vậy nó sẽ dễ đọc hơn (mặc dù mọi người đã quen với các hàm Parse thông thường).

public static class StringExtensions
{
    /// <summary>
    /// Converts a string to int.
    /// </summary>
    /// <param name="value">The string to convert.</param>
    /// <returns>The converted integer.</returns>
    public static int ParseToInt32(this string value)
    {
        return int.Parse(value);
    }

    /// <summary>
    /// Checks whether the value is integer.
    /// </summary>
    /// <param name="value">The string to check.</param>
    /// <param name="result">The out int parameter.</param>
    /// <returns>true if the value is an integer; otherwise, false.</returns>
    public static bool TryParseToInt32(this string value, out int result)
    {
        return int.TryParse(value, out result);
    }
}

Và sau đó bạn có thể gọi nó theo cách đó:

  1. Nếu bạn chắc chắn rằng chuỗi của bạn là một số nguyên, như "50".

    int num = TextBoxD1.Text.ParseToInt32();
  2. Nếu bạn không chắc chắn và muốn ngăn chặn sự cố.

    int num;
    if (TextBoxD1.Text.TryParseToInt32(out num))
    {
        //The parse was successful, the num has the parsed value.
    }

Để làm cho nó năng động hơn, vì vậy bạn cũng có thể phân tích cú pháp để nhân đôi, thả nổi, v.v., bạn có thể tạo một phần mở rộng chung.


4

Chuyển đổi stringđể intcó thể được thực hiện cho: int, Int32, Int64và các loại dữ liệu khác phản ánh các kiểu dữ liệu số nguyên trong .NET

Ví dụ dưới đây cho thấy chuyển đổi này:

Phần tử bộ điều hợp dữ liệu hiển thị (để biết thông tin) này được khởi tạo thành giá trị int. Điều tương tự có thể được thực hiện trực tiếp như,

int xxiiqVal = Int32.Parse(strNabcd);

Ví dụ.

string strNii = "";
UsrDataAdapter.SelectCommand.Parameters["@Nii"].Value = Int32.Parse(strNii );

Liên kết để xem bản demo này .



4

Bạn có thể thực hiện như bên dưới mà không cần các hàm TryPude hoặc inbuilt:

static int convertToInt(string a)
{
    int x = 0;
    for (int i = 0; i < a.Length; i++)
    {
        int temp = a[i] - '0';
        if (temp != 0)
        {
            x += temp * (int)Math.Pow(10, (a.Length - (i+1)));
        }
    }
    return x;
}

convertToInt ("1234") cung cấp 10000 ...... nếu bạn định sao chép câu trả lời của người khác, ít nhất là sao chép toàn bộ nội dung
SerenityNow

đừng so sánh tôi với chính mình .. thêm giải pháp cập nhật thay vào đó .. lol
triển lazyd

@SerenityNow bạn có thể kiểm tra ngay bây giờ. Đó là lỗi chính tả.
triển lazyd

1
đề cập đến id của bạn, một nhà phát triển lười biếng sẽ không tạo ra phương pháp như vậy! ; D tốt
S.Serpooshan


2

Bạn có thể chuyển đổi chuỗi thành một giá trị số nguyên với sự trợ giúp của phương thức phân tích cú pháp.

Ví dụ:

int val = Int32.parse(stringToBeParsed);
int x = Int32.parse(1234);

Điều này khác với câu trả lời trước như thế nào?
Peter Mortensen

2

Cách tôi luôn làm điều này là như thế này:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace example_string_to_int
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            string a = textBox1.Text;
            // This turns the text in text box 1 into a string
            int b;
            if (!int.TryParse(a, out b))
            {
                MessageBox.Show("This is not a number");
            }
            else
            {
                textBox2.Text = a+" is a number" ;
            }
            // Then this 'if' statement says if the string is not a number, display an error, else now you will have an integer.
        }
    }
}

Đây là cách tôi sẽ làm điều đó.


0

Nếu bạn đang tìm kiếm con đường dài, chỉ cần tạo một phương thức của bạn:

static int convertToInt(string a)
    {
        int x = 0;

        Char[] charArray = a.ToCharArray();
        int j = charArray.Length;

        for (int i = 0; i < charArray.Length; i++)
        {
            j--;
            int s = (int)Math.Pow(10, j);

            x += ((int)Char.GetNumericValue(charArray[i]) * s);
        }
        return x;
    }

0

PHƯƠNG PHÁP 1

int  TheAnswer1 = 0;
bool Success = Int32.TryParse("42", out TheAnswer1);
if (!Success) {
    Console.WriteLine("String not Convertable to an Integer");
}

PHƯƠNG PHÁP 2

int TheAnswer2 = 0;
try {
    TheAnswer2 = Int32.Parse("42");
}
catch {
    Console.WriteLine("String not Convertable to an Integer");
}

PHƯƠNG PHÁP 3

int TheAnswer3 = 0;
try {
    TheAnswer3 = Int32.Parse("42");
}
catch (FormatException) {
    Console.WriteLine("String not in the correct format for an Integer");
}
catch (ArgumentNullException) {
    Console.WriteLine("String is null");
}
catch (OverflowException) {
    Console.WriteLine("String represents a number less than"
                      + "MinValue or greater than MaxValue");
}

0

Mã này hoạt động với tôi trong Visual Studio 2010:

int someValue = Convert.ToInt32(TextBoxD1.Text);

Có, nhưng nó khác với câu trả lời trước như thế nào?
Peter Mortensen

0

Điều này làm việc cho tôi:

using System;

namespace numberConvert
{
    class Program
    {
        static void Main(string[] args)
        {
            string numberAsString = "8";
            int numberAsInt = int.Parse(numberAsString);
        }
    }
}

Một lời giải thích sẽ theo thứ tự.
Peter Mortensen

0

Bạn có thể thử như sau. Nó sẽ hoạt động:

int x = Convert.ToInt32(TextBoxD1.Text);

Giá trị chuỗi trong biến TextBoxD1.Text sẽ được chuyển đổi thành Int32 và sẽ được lưu trữ trong x.


0

Trong C # v.7, bạn có thể sử dụng tham số nội tuyến, mà không cần khai báo biến bổ sung:

int.TryParse(TextBoxD1.Text, out int x);

outBây giờ không có tham số nào nản lòng trong C #?
Peter Mortensen

-3

Điều này có thể giúp bạn; D

{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        float Stukprijs;
        float Aantal;
        private void label2_Click(object sender, EventArgs e)
        {

        }

        private void button2_Click(object sender, EventArgs e)
        {
            MessageBox.Show("In de eersre textbox staat een geldbedrag." + Environment.NewLine + "In de tweede textbox staat een aantal." + Environment.NewLine + "Bereken wat er moetworden betaald." + Environment.NewLine + "Je krijgt 15% korting over het bedrag BOVEN de 100." + Environment.NewLine + "Als de korting meer dan 10 euri is," + Environment.NewLine + "wordt de korting textbox lichtgroen");
        }

        private void button1_Click(object sender, EventArgs e)
        {
            errorProvider1.Clear();
            errorProvider2.Clear();
            if (float.TryParse(textBox1.Text, out Stukprijs))
            {
                if (float.TryParse(textBox2.Text, out Aantal))
                {
                    float Totaal = Stukprijs * Aantal;
                    string Output = Totaal.ToString();
                    textBox3.Text = Output;
                    if (Totaal >= 100)
                    {
                        float korting = Totaal - 100;
                        float korting2 = korting / 100 * 15;
                        string Output2 = korting2.ToString();
                        textBox4.Text = Output2;
                        if (korting2 >= 10)
                        {
                            textBox4.BackColor = Color.LightGreen;
                        }
                        else
                        {
                            textBox4.BackColor = SystemColors.Control;
                        }
                    }
                    else
                    {
                        textBox4.Text = "0";
                        textBox4.BackColor = SystemColors.Control;
                    }
                }
                else
                {
                    errorProvider2.SetError(textBox2, "Aantal plz!");
                }

            }
            else
            {
                errorProvider1.SetError(textBox1, "Bedrag plz!");
                if (float.TryParse(textBox2.Text, out Aantal))
                {

                }
                else
                {
                    errorProvider2.SetError(textBox2, "Aantal plz!");
                }
            }

        }

        private void BTNwissel_Click(object sender, EventArgs e)
        {
            //LL, LU, LR, LD.
            Color c = LL.BackColor;
            LL.BackColor = LU.BackColor;
            LU.BackColor = LR.BackColor;
            LR.BackColor = LD.BackColor;
            LD.BackColor = c;
        }

        private void button3_Click(object sender, EventArgs e)
        {
            MessageBox.Show("zorg dat de kleuren linksom wisselen als je op de knop drukt.");
        }
    }
}

Một lời giải thích sẽ theo thứ tự.
Peter Mortensen
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.