Bagaimana saya bisa mengubah String ke Int?

638

Saya punya TextBoxD1.Textdan saya ingin mengubahnya menjadi intuntuk menyimpannya dalam database.

Bagaimana saya bisa melakukan ini?

turki2009
sumber

Jawaban:

1038

Coba ini:

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

atau lebih baik lagi:

int x = 0;

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

Juga, karena Int32.TryParsemengembalikan a boolAnda dapat menggunakan nilai pengembaliannya untuk membuat keputusan tentang hasil upaya penguraian:

int x = 0;

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

Jika Anda penasaran, perbedaan antara Parsedan TryParseyang terbaik disimpulkan seperti ini:

Metode TryParse seperti metode Parse, kecuali metode TryParse tidak memberikan pengecualian jika konversi gagal. Ini menghilangkan kebutuhan untuk menggunakan penanganan pengecualian untuk menguji FormatException jika s tidak valid dan tidak dapat diurai dengan sukses. - MSDN

Andrew Hare
sumber
3
Bagaimana jika integernya 64 bit, atau terlihat seperti "aslkdlksadjsd"? Apakah ini masih aman?
Jonny
6
@Jonny Int64.Parse(). Jika inputnya bukan int, maka Anda akan mendapatkan eksekusi dan jejak stack dengan Int64.Parse, atau boolean Falsedengan Int64.TryParse(), jadi Anda akan memerlukan pernyataan if, seperti if (Int32.TryParse(TextBoxD1.Text, out x)) {}.
1
Anda juga bisa mencoba menginisialisasi variabel di TryParse jika hanya akan digunakan di dalam kondisi keberhasilan. mis: Int32.TryParse (TextBoxD1.Text, out int x))
simplysiby
5
Mungkin ini sangat jelas bagi semua orang, tetapi bagi orang noob apa yang dilakukan 'out x' adalah mengatur nilai x ke string-cast-as-integer, jika casting berhasil. Yaitu dalam hal ini, x = 0 jika string memiliki karakter non-integer, atau x = nilai string-as-integer sebaliknya. Jadi hal yang rapi adalah ini adalah satu ungkapan pendek yang memberitahu Anda apakah casting berhasil atau tidak, DAN menyimpan integer cor dalam suatu variabel pada saat yang bersamaan. Jelas Anda akan sering ingin melanjutkan di atas baris dengan 'else {// string parsed bukan bilangan bulat, oleh karena itu beberapa kode untuk menangani situasi ini}'
Will Croxford
@Roberto ok, tetapi ada kemungkinan bahwa pengguna (baik secara tidak sengaja atau sengaja) mengetik nilai "aslkdlksadjsd" di dalam kotak teks! jadi haruskah program kita mogok?
S.Serpooshan
55
Convert.ToInt32( TextBoxD1.Text );

Gunakan ini jika Anda merasa yakin bahwa isi kotak teks itu valid int. Opsi yang lebih aman adalah

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

Ini akan memberi Anda beberapa nilai default yang dapat Anda gunakan. Int32.TryParsejuga mengembalikan nilai Boolean yang menunjukkan apakah ia dapat menguraikan atau tidak, sehingga Anda bahkan dapat menggunakannya sebagai kondisi ifpernyataan.

if( Int32.TryParse( TextBoxD1.Text, out val ){
  DoSomething(..);
} else {
  HandleBadInput(..);
}
Babak Naffas
sumber
-1 RE. "Ini akan memberi Anda beberapa nilai default yang dapat Anda gunakan." Jika maksud Anda val, perkirakan masalah: "Parameter ini dilewati tanpa diinisialisasi; nilai apa pun yang awalnya diberikan dalam hasil akan ditimpa." [Ref. docs.microsoft.com/en-us/dotnet/api/… ]
Zeek2
6
10 tahun yang lalu saya meminta maaf.
Babak Naffas
37
int.TryParse()

Itu tidak akan melempar jika teksnya bukan angka.

n8wrl
sumber
Ini lebih baik dari dua lainnya. Input pengguna cenderung format yang salah. Yang ini lebih efisien daripada menggunakan penanganan pengecualian seperti yang dibutuhkan.
PamanO
Persis. Ini mengembalikan false jika konversi gagal.
n8wrl
21
int myInt = int.Parse(TextBoxD1.Text)

Cara lain adalah:

bool isConvertible = false;
int myInt = 0;

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

Perbedaan antara keduanya adalah bahwa yang pertama akan melempar pengecualian jika nilai dalam kotak teks Anda tidak dapat dikonversi, sedangkan yang kedua hanya akan mengembalikan false.

Andre Kraemer
sumber
Variabel boolean di atas sangat berguna kita menggunakan nilai yang dikonversi untuk comaprison, katakanlah dalam klausa if. code int NumericJL; bool isNum = int.TryParse (nomeeJobBand, out NumericJL); if (isNum) // JL yang retensi dapat dikirimkan ke int lalu lanjutkan untuk perbandingan {if (! (NumericJL> = 6)) {// Nominasikan} // lain {}}
baymax
16

Anda perlu mengurai string, dan Anda juga perlu memastikan bahwa itu benar-benar dalam format bilangan bulat.

Cara termudah adalah ini:

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
}
Yakub
sumber
14

Hati-hati saat menggunakan Convert.ToInt32 () di char!
Ini akan mengembalikan kode karakter UTF-16 !

Jika Anda mengakses string hanya di posisi tertentu menggunakan [i]operator pengindeksan, itu akan mengembalikan a chardan bukan string!

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

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

int x = Convert.ToInt32(input[indexOfSeven].toString());  // Returns 7
Mong Zhu
sumber
11
int x = 0;
int.TryParse(TextBoxD1.Text, out x);

Pernyataan TryParse mengembalikan boolean yang mewakili apakah parse telah berhasil atau tidak. Jika berhasil, nilai yang diuraikan disimpan ke dalam parameter kedua.

Lihat Int32.TryParse Method (String, Int32) untuk informasi lebih detail.

jorelli
sumber
11

Bersenang senang lah...

int i = 0;
string s = "123";
i =int.Parse(s);
i = Convert.ToInt32(s);
Salim Latif Waigaonkar
sumber
10

Meskipun sudah ada banyak solusi di sini yang menjelaskan int.Parse, ada sesuatu yang penting yang hilang dalam semua jawaban. Biasanya, representasi string dari nilai numerik berbeda menurut budaya. Elemen string numerik seperti simbol mata uang, pemisah grup (atau ribuan), dan pemisah desimal semuanya berbeda menurut budaya.

Jika Anda ingin membuat cara yang kuat untuk mengurai string ke integer, karena itu penting untuk mempertimbangkan informasi budaya. Jika tidak, pengaturan budaya saat ini akan digunakan. Itu mungkin memberi pengguna kejutan yang tidak menyenangkan - atau bahkan lebih buruk, jika Anda mem-parsing format file. Jika Anda hanya ingin parsing bahasa Inggris, yang terbaik adalah membuatnya eksplisit, dengan menentukan pengaturan budaya untuk digunakan:

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

Untuk informasi lebih lanjut, baca di CultureInfo, khususnya NumberFormatInfo di MSDN.

atlaste
sumber
8

Anda dapat menulis metode ekstensi Anda sendiri

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();
    }
}

Dan dimanapun dalam kode panggil saja

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

Dalam kasus nyata ini

int yourValue = TextBoxD1.Text.ParseInt();
Miroslav Holec
sumber
Bukankah seharusnya kelas dipanggil StringExtensionsbukan IntegerExtensions, karena metode ekstensi ini bekerja pada stringdan bukan pada int?
Shiva
7

Seperti yang dijelaskan dalam dokumentasi TryParse , TryParse () mengembalikan Boolean yang menunjukkan bahwa nomor yang valid ditemukan:

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
}
JeffH
sumber
7
int x = Int32.TryParse(TextBoxD1.Text, out x) ? x : 0;
Mohammad Rahman
sumber
Ringkas & memberikan standar 👍
Zeek2
6

Anda bisa menggunakan,

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

atau

int i = int.Parse(TextBoxD1.Text);
Jalan buntu
sumber
Bagaimana ini berbeda dari jawaban sebelumnya?
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;
}
Jsprings
sumber
Gagal bayar dalam kasus ini bukan ide yang baik. Jika diperlukan default, saya sarankan mengembalikan 0.
Prageeth Saravanan
5

Anda dapat mengonversi string menjadi int di C # menggunakan:

Fungsi kelas convert yaitu Convert.ToInt16(), Convert.ToInt32(), Convert.ToInt64()atau dengan menggunakan Parsedan TryParsefungsi. Contoh diberikan di sini .

Atif
sumber
Bagaimana ini berbeda dari jawaban sebelumnya?
Peter Mortensen
4

Anda juga dapat menggunakan metode ekstensi , sehingga akan lebih mudah dibaca (meskipun semua orang sudah terbiasa dengan fungsi Parse biasa).

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);
    }
}

Dan kemudian Anda bisa menyebutnya seperti itu:

  1. Jika Anda yakin bahwa string Anda adalah bilangan bulat, seperti "50".

    int num = TextBoxD1.Text.ParseToInt32();
  2. Jika Anda tidak yakin dan ingin mencegah crash.

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

Untuk membuatnya lebih dinamis, sehingga Anda dapat menguraikannya juga menjadi dua kali lipat, mengambang, dll., Anda dapat membuat ekstensi generik.

Misha Zaslavsky
sumber
4

Konversi stringke intdapat dilakukan untuk: int, Int32, Int64dan tipe data lain yang mencerminkan jenis data integer di NET

Contoh di bawah ini menunjukkan konversi ini:

Ini menunjukkan (untuk info) elemen adaptor data yang diinisialisasi ke nilai int. Hal yang sama dapat dilakukan secara langsung seperti,

int xxiiqVal = Int32.Parse(strNabcd);

Ex.

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

Tautan untuk melihat demo ini .

Edwin b
sumber
4

Ini akan dilakukan

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

Atau bisa Anda gunakan

int xi = Int32.Parse(x);

Lihat Jaringan Pengembang Microsoft untuk informasi lebih lanjut

Pendayung
sumber
Bagaimana ini berbeda dari jawaban sebelumnya?
Peter Mortensen
4

Anda dapat melakukannya seperti di bawah ini tanpa fungsi TryParse atau 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;
}
lazydeveloper
sumber
convertToInt ("1234") memberikan 10000 ...... jika Anda akan menyalin jawaban orang lain, setidaknya salin semuanya
SerenityNow
jangan membandingkan saya dengan diri sendiri .. tambahkan solusi yang diperbarui sebagai gantinya .. lol
lazydeveloper
@Serenity Sekarang Anda dapat memeriksa sekarang. Itu kesalahan ketik.
lazydeveloper
1
merujuk pada id Anda, seorang pengembang- malas tidak akan membuat metode seperti itu! ; D bagus
S.Serpooshan
3
int i = Convert.ToInt32(TextBoxD1.Text);
deepu
sumber
Penjelasan akan diurutkan. Misalnya, apa bedanya dengan jawaban Babak Naffas ?
Peter Mortensen
2

Anda dapat mengonversi string ke nilai integer dengan bantuan metode parse.

Misalnya:

int val = Int32.parse(stringToBeParsed);
int x = Int32.parse(1234);
Pembuat kode
sumber
Bagaimana ini berbeda dari jawaban sebelumnya?
Peter Mortensen
2

Cara saya selalu melakukan ini adalah seperti ini:

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.
        }
    }
}

Inilah yang akan saya lakukan.

Isaac Newton
sumber
0

Jika Anda mencari jalan panjang, cukup buat satu metode Anda:

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;
    }
jul tap
sumber
0

METODE 1

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

METODE 2

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

METODE 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");
}
Bill Moore
sumber
0

Kode ini berfungsi untuk saya di Visual Studio 2010:

int someValue = Convert.ToInt32(TextBoxD1.Text);
Sarib Shamim
sumber
Ya, tetapi apa bedanya dengan jawaban sebelumnya?
Peter Mortensen
0

Ini bekerja untuk saya:

using System;

namespace numberConvert
{
    class Program
    {
        static void Main(string[] args)
        {
            string numberAsString = "8";
            int numberAsInt = int.Parse(numberAsString);
        }
    }
}
Sheridan Irvine
sumber
Penjelasan akan diurutkan.
Peter Mortensen
0

Anda dapat mencoba yang berikut ini. Ini akan bekerja:

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

Nilai string dalam variabel TextBoxD1.Text akan dikonversi menjadi Int32 dan akan disimpan dalam x.

Kartikey Kushwaha
sumber
0

Di C # v.7 Anda bisa menggunakan parameter inline out, tanpa deklarasi variabel tambahan:

int.TryParse(TextBoxD1.Text, out int x);
Max Miller
sumber
Bukankah outparameter tidak disarankan di C # sekarang?
Peter Mortensen
-3

Ini dapat membantu Anda; 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.");
        }
    }
}
jan koekepan
sumber
Penjelasan akan diurutkan.
Peter Mortensen