Nilai tidak selalu diperoleh dengan tipe yang siap dipakai. Angka dari input pengguna datang sebagai string, padahal perhitungan butuh int; hasil int mungkin perlu masuk ke variable double. C# menyediakan dua jalur konversi pada value — implicit dan explicit — ditambah method bawaan seperti Convert dan Parse. Bab ini fokus pada konversi nilai antar tipe; sudut pandang hierarki object dibahas terpisah pada bab Type Casting.

Konversi Implicit: Otomatis dan Aman #

Konversi implicit berjalan tanpa sintaks tambahan. Syaratnya satu: tipe tujuan harus mampu menampung seluruh kemungkinan nilai tipe asal, sehingga tidak ada data yang terbuang. int muat penuh di long dan di double, sehingga compiler menjalankan konversi ini secara langsung:

csharp
int angkaKecil = 250;
long angkaBesar = angkaKecil;
double angkaRiil = angkaKecil;

Console.WriteLine(angkaBesar);
Console.WriteLine(angkaRiil);

Output yang Dihasilkan:

text
250
250

Mari kita telaah:

  1. Baris 2 (long angkaBesar = angkaKecil;): Compiler menyalin nilai int ke slot long; rentang long lebih luas sehingga konversi dianggap aman.
  2. Baris 3 (double angkaRiil = angkaKecil;): Nilai int juga masuk ke double tanpa sintaks tambahan.
  3. Baris 5-6: Nilai tercetak sama, karena tidak ada data yang berubah pada arah konversi ini.

Arah sebaliknya tidak otomatis. long dapat berisi angka yang tidak muat di int, dan compiler menolak kemungkinan kehilangan data tersebut tanpa pernyataan eksplisit dari programmer.

Konversi Explicit: Cast yang Meminta Izin #

Mengubah tipe besar ke tipe kecil memerlukan cast: nama tipe target dalam kurung di depan nilai. Programmer dengan demikian menyatakan siap menerima konsekuensinya:

csharp
double nilaiUjian = 87.75;
int nilaiBulat = (int)nilaiUjian;

Console.WriteLine(nilaiBulat);

Output yang Dihasilkan:

text
87

Cast (int) memotong bagian desimal, bukan membulatkan: 87.75 menjadi 87. Bagian 0,75 terbuang. Ketika pembulatan yang dibutuhkan, gunakan Convert.

Convert.ToXxx dan int.Parse #

Class Convert menyediakan method konversi untuk banyak pasangan tipe. Convert.ToInt32 membulatkan nilai double ke bilangan genap terdekat — perilaku yang sering mengejutkan:

csharp
Console.WriteLine(Convert.ToInt32(2.5));
Console.WriteLine(Convert.ToInt32(3.5));

int hargaTiket = int.Parse("45000");
Console.WriteLine(hargaTiket);

Output yang Dihasilkan:

text
2
4
45000

2.5 dan 3.5 sama-sama berada di tengah dua bilangan bulat; Convert.ToInt32 memilih bilangan genap terdekat sehingga hasilnya 2 dan 4. Method int.Parse berbeda tugas: method tersebut mengubah string menjadi int, cocok untuk data teks yang pasti berisi angka.

csharp
int harga = int.Parse("dua ribu");

Output yang Dihasilkan:

text
Unhandled exception. System.FormatException: The input string 'dua ribu' was not in a correct format.
   at System.Number.ThrowFormatException[TChar](ReadOnlySpan`1 value)
   at System.Int32.Parse(String s)
   at Program.<Main>$(String[] args) in Program.cs:line 1

Untuk input yang belum pasti valid, gunakan int.TryParse yang mengembalikan nilai bool; pembahasan lengkapnya ada pada section Input dan Output.