Bagikan melalui


Cara mengonversi string menjadi angka (Panduan Pemrograman C#)

Anda mengonversi string menjadi angka dengan memanggil metode Parse atau TryParse yang ditemukan pada jenis numerik (int, long, double, dan seterusnya), atau menggunakan metode di kelas System.Convert.

Sedikit lebih efisien dan mudah untuk memanggil metode TryParse (misalnya, int.TryParse("11", out number)) atau metode Parse (misalnya, var number = int.Parse("11")). Menggunakan metode Convert lebih berguna untuk objek umum yang mengimplementasikan IConvertible.

Anda menggunakan metode Parse atau TryParse pada jenis numerik yang Anda harapkan berisi string, seperti jenis System.Int32. Metode Convert.ToInt32 menggunakan Parse secara internal. Metode Parse mengembalikan angka yang dikonversi; metode TryParse mengembalikan nilai boolean yang menunjukkan apakah konversi berhasil, dan mengembalikan angka yang dikonversi dalam parameter out. Jika string tidak dalam format yang valid, Parse melemparkan pengecualian, tetapi TryParse mengembalikan false. Saat memanggil metode Parse, Anda harus selalu menggunakan penanganan pengecualian untuk menangkap FormatException saat operasi penguraian gagal.

Metode Call Parse atau TryParse

Metode Parse dan TryParse mengabaikan spasi kosong di awal dan akhir string, tetapi semua karakter lain harus berupa karakter yang membentuk jenis numerik yang sesuai (int, long, ulong, float, decimal, dan seterusnya). Setiap spasi kosong dalam string yang membentuk angka akan menyebabkan kesalahan. Misalnya, Anda dapat menggunakan decimal.TryParse untuk mengurai "10", "10.3", atau " 10 ", tetapi Anda tidak dapat menggunakan metode ini untuk mengurai 10 dari "10X", "1 0" (perhatikan ruang yang disematkan), "10 .3" (perhatikan ruang yang disematkan), "10e1" (float.TryParse berfungsi di sini), dan sebagainya. String yang nilainya null atau String.Empty gagal diuraikan dengan berhasil. Anda dapat memeriksa string null atau kosong sebelum mencoba menguraikannya dengan memanggil metode String.IsNullOrEmpty.

Contoh berikut menunjukkan panggilan yang berhasil dan tidak berhasil ke Parse dan TryParse.

using System;

public static class StringConversion
{
    public static void Main()
    {
        string input = String.Empty;
        try
        {
            int result = Int32.Parse(input);
            Console.WriteLine(result);
        }
        catch (FormatException)
        {
            Console.WriteLine($"Unable to parse '{input}'");
        }
        // Output: Unable to parse ''

        try
        {
            int numVal = Int32.Parse("-105");
            Console.WriteLine(numVal);
        }
        catch (FormatException e)
        {
            Console.WriteLine(e.Message);
        }
        // Output: -105

        if (Int32.TryParse("-105", out int j))
        {
            Console.WriteLine(j);
        }
        else
        {
            Console.WriteLine("String could not be parsed.");
        }
        // Output: -105

        try
        {
            int m = Int32.Parse("abc");
        }
        catch (FormatException e)
        {
            Console.WriteLine(e.Message);
        }
        // Output: Input string was not in a correct format.

        const string inputString = "abc";
        if (Int32.TryParse(inputString, out int numValue))
        {
            Console.WriteLine(numValue);
        }
        else
        {
            Console.WriteLine($"Int32.TryParse could not parse '{inputString}' to an int.");
        }
        // Output: Int32.TryParse could not parse 'abc' to an int.
    }
}

Contoh berikut mengilustrasikan satu pendekatan untuk menguraikan string yang diharapkan menyertakan karakter numerik utama (termasuk karakter heksadesimal) dan karakter non-numerik di belakangnya. Ini menetapkan karakter yang valid dari awal string ke string baru sebelum memanggil metode TryParse. Karena string yang akan diuraikan berisi beberapa karakter, contoh memanggil metode String.Concat untuk menetapkan karakter yang valid ke string baru. Untuk string yang lebih besar, kelas StringBuilder dapat digunakan sebagai gantinya.

using System;

public static class StringConversion
{
    public static void Main()
    {
        var str = "  10FFxxx";
        string numericString = string.Empty;
        foreach (var c in str)
        {
            // Check for numeric characters (hex in this case) or leading or trailing spaces.
            if ((c >= '0' && c <= '9') || (char.ToUpperInvariant(c) >= 'A' && char.ToUpperInvariant(c) <= 'F') || c == ' ')
            {
                numericString = string.Concat(numericString, c.ToString());
            }
            else
            {
                break;
            }
        }

        if (int.TryParse(numericString, System.Globalization.NumberStyles.HexNumber, null, out int i))
        {
            Console.WriteLine($"'{str}' --> '{numericString}' --> {i}");
        }
        // Output: '  10FFxxx' --> '  10FF' --> 4351

        str = "   -10FFXXX";
        numericString = "";
        foreach (char c in str)
        {
            // Check for numeric characters (0-9), a negative sign, or leading or trailing spaces.
            if ((c >= '0' && c <= '9') || c == ' ' || c == '-')
            {
                numericString = string.Concat(numericString, c);
            }
            else
            {
                break;
            }
        }

        if (int.TryParse(numericString, out int j))
        {
            Console.WriteLine($"'{str}' --> '{numericString}' --> {j}");
        }
        // Output: '   -10FFXXX' --> '   -10' --> -10
    }
}

Metode Call Convert

Tabel berikut mencantumkan beberapa metode dari kelas Convert yang dapat Anda gunakan untuk mengonversi string menjadi angka.

Jenis numerik Metode
decimal ToDecimal(String)
float ToSingle(String)
double ToDouble(String)
short ToInt16(String)
int ToInt32(String)
long ToInt64(String)
ushort ToUInt16(String)
uint ToUInt32(String)
ulong ToUInt64(String)

Contoh berikut memanggil Convert.ToInt32(String) metode untuk mengonversi string input ke int. Contohnya menangkap dua pengecualian paling umum yang dilemparkan oleh metode ini: FormatException dan OverflowException. Jika angka yang dihasilkan dapat bertambah tanpa melebihi Int32.MaxValue, contoh menambahkan 1 ke hasil dan menampilkan output.

using System;

public class ConvertStringExample1
{
    static void Main(string[] args)
    {
        int numVal = -1;
        bool repeat = true;

        while (repeat)
        {
            Console.Write("Enter a number between −2,147,483,648 and +2,147,483,647 (inclusive): ");

            string? input = Console.ReadLine();

            // ToInt32 can throw FormatException or OverflowException.
            try
            {
                numVal = Convert.ToInt32(input);
                if (numVal < Int32.MaxValue)
                {
                    Console.WriteLine("The new value is {0}", ++numVal);
                }
                else
                {
                    Console.WriteLine("numVal cannot be incremented beyond its current value");
                }
           }
            catch (FormatException)
            {
                Console.WriteLine("Input string is not a sequence of digits.");
            }
            catch (OverflowException)
            {
                Console.WriteLine("The number cannot fit in an Int32.");
            }

            Console.Write("Go again? Y/N: ");
            string? go = Console.ReadLine();
            if (go?.ToUpper() != "Y")
            {
                repeat = false;
            }
        }
    }
}
// Sample Output:
//   Enter a number between -2,147,483,648 and +2,147,483,647 (inclusive): 473
//   The new value is 474
//   Go again? Y/N: y
//   Enter a number between -2,147,483,648 and +2,147,483,647 (inclusive): 2147483647
//   numVal cannot be incremented beyond its current value
//   Go again? Y/N: y
//   Enter a number between -2,147,483,648 and +2,147,483,647 (inclusive): -1000
//   The new value is -999
//   Go again? Y/N: n