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