Data tidak selalu datang dalam tipe yang kita butuhkan: pembacaan berkas sering menghasilkan teks padahal komputasi menuntut angka, dan sebaliknya laporan meminta angka menjadi teks yang rapi. MATLAB tidak melakukan konversi tipe secara diam-diam di luar kasus sederhana — kita harus menyebutkan konversinya secara eksplisit. Pada Chapter ini kita pelajari fungsi-fungsi konversi, perilaku pembulatan yang menyertainya, dan cara memvalidasi tipe sebelum memproses data.
Konversi Eksplisit Antar Kelas #
Setiap kelas data memiliki fungsi konversi bernama sama dengan kelasnya: double(), single(), int8() hingga uint64(), char(), logical(), dan string(). Fungsi-fungsi ini menerima satu nilai atau seluruh array dan mengembalikan salinan dengan kelas baru:
fprintf('class double(true) : %s\n', class(double(true)));
fprintf('class single(5) : %s\n', class(single(5)));
fprintf('class logical(5) : %s\n', class(logical(5)));
fprintf('double(true) : %d\n', double(true));
fprintf('logical(5) : %d\n', logical(5));Output yang Dihasilkan:
class double(true) : double
class single(5) : single
class logical(5) : logical
double(true) : 1
logical(5) : 1Mari kita bedah baris-baris kode di atas:
- Baris 1 (
double(true)):logicalmenjadidoubledengan nilai 1 — representasi numeriktrue. - Baris 3 (
logical(5)): angka 5 (double) menjadilogicaldengan aturan nonzero is true; hasilnya 1 (kelaslogical). - Konversi menghasilkan salinan: variabel asli tidak berubah; hasil konversi harus ditangkap ke variabel baru bila akan dipakai.
Pembulatan ke Integer: round, fix, floor, ceil #
Konversi ke kelas integer (misalnya int8(2.9)) membulatkan nilai ke bilangan bulat terdekat. Ketika kita ingin mengendalikan arah pembulatan sendiri, MATLAB menyediakan empat fungsi dengan perilaku berbeda:
| Fungsi | Perilaku | Contoh | Hasil |
|---|---|---|---|
round | ke bilangan bulat terdekat; nilai setengah menjauhi nol | round(2.5), round(-2.5) | 3, -3 |
fix | ke arah nol (membuang desimal) | fix(2.9), fix(-2.9) | 2, -2 |
floor | ke bawah (arah minus tak hingga) | floor(2.1), floor(-2.1) | 2, -3 |
ceil | ke atas (arah plus tak hingga) | ceil(2.1), ceil(-2.1) | 3, -2 |
Empat fungsi ini bekerja pada double dan menghasilkan double bernilai bulat — kelasnya tidak berubah sampai kita mengonversinya. Mari kita lihat pasangan perilakunya pada bilangan positif dan negatif:
fprintf('int8(2.9) : %d\n', int8(2.9));
fprintf('int8(-2.7) : %d\n', int8(-2.7));
fprintf('round(2.5) : %d\n', round(2.5));
fprintf('round(-2.5) : %d\n', round(-2.5));
fprintf('fix(2.9) : %d\n', fix(2.9));
fprintf('fix(-2.9) : %d\n', fix(-2.9));
fprintf('floor(-2.1) : %d\n', floor(-2.1));
fprintf('ceil(-2.1) : %d\n', ceil(-2.1));Output yang Dihasilkan:
int8(2.9) : 3
int8(-2.7) : -3
round(2.5) : 3
round(-2.5) : -3
fix(2.9) : 2
fix(-2.9) : -2
floor(-2.1) : -3
ceil(-2.1) : -2Mari kita bedah baris-baris kode di atas:
- Baris 1-2 (
int8(...)): konversi langsung membulatkan ke terdekat —2.9naik ke 3,-2.7turun ke -3. Ini bukan pemotongan;fixbarulah yang memotong. - Baris 4-5 (
round): nilai setengah dibulatkan menjauhi nol —2.5menjadi 3 dan-2.5menjadi -3. - Baris 6-7 (
fix): pemotongan ke arah nol —2.9menjadi 2 dan-2.9menjadi -2. - Baris 8-9 (
floor,ceil): pada bilangan negatif keduanya terasa paling berbeda;floor(-2.1)makin turun ke -3,ceil(-2.1)naik ke -2.
Konversi char dan double Lewat Kode ASCII #
Kelas char dan double juga saling terkonversi lewat kode ASCII — setiap karakter punya nomor numeriknya. Konversi ini memungkinkan trik seperti menggeser huruf atau memeriksa rentang karakter:
fprintf('double(''A'') : %d\n', double('A'));
fprintf('char(97) : %s\n', char(97));
fprintf('char(''A''+1) : %s\n', char('A' + 1));Output yang Dihasilkan:
double('A') : 65
char(97) : a
char('A'+1) : BMari kita bedah baris-baris kode di atas:
- Baris 1 (
double('A')): kode ASCII huruf A adalah 65. - Baris 2 (
char(97)): angka 97 adalah huruf kecila— kode ASCII mengikuti urutan huruf, sehinggaa(97) berada 32 langkah setelahA(65). - Baris 3 (
char('A' + 1)): penjumlahan'A' + 1berlangsung sebagai 65 + 1 = 66 di kelasdouble;char(66)mengembalikannya menjadi hurufB.
Untuk kebutuhan yang lebih umum — menggabungkan angka ke dalam teks, atau membaca angka dari teks — MATLAB menyediakan num2str() dan str2double():
teks = num2str(3.14);
fprintf('num2str(3.14) : %s (class %s)\n', teks, class(teks));
fprintf('str2double : %g\n', str2double('2.5'));Output yang Dihasilkan:
num2str(3.14) : 3.14 (class char)
str2double : 2.5Fungsi num2str() menghasilkan kelas char sehingga hasilnya bisa dicetak dengan %s atau digabungkan dengan kurung siku; str2double() berjalan arah sebaliknya dan menghasilkan double.
Validasi Tipe Sebelum Memproses #
Konversi ke tipe yang salah menghasilkan data rusak, bukan galat. Sebelum memproses masukan, periksa kelasnya dengan fungsi pemeriksa: isnumeric(), ischar(), islogical(), dan isstring():
fprintf('isnumeric(5) : %d\n', isnumeric(5));
fprintf('ischar(''halo'') : %d\n', ischar('halo'));
fprintf('islogical(true) : %d\n', islogical(true));Output yang Dihasilkan:
isnumeric(5) : 1
ischar('halo') : 1
islogical(true) : 1Semua fungsi pemeriksa mengembalikan logical scalar: 1 bila kelasnya cocok, 0 bila tidak. Pola umum penggunaannya adalah percabangan validasi — misalnya if isnumeric(x) sebelum menghitung, atau if ischar(nama) sebelum memanggil strtrim. Perlu dicatat: isnumeric(5) bernilai true untuk semua kelas numerik (double, single, integer), sedangkan ischar hanya menerima kelas char; teks bertipe string terdeteksi oleh isstring() — fungsi yang hadir sejak MATLAB R2016b karena mengikuti kehadiran kelas string itu sendiri.
Berkas contoh.m pada bagian bawah halaman merangkum konversi kelas, keempat fungsi pembulatan, konversi ASCII, dan validasi tipe dalam satu script yang dapat dijalankan langsung.
Ringkasan #
Konversi tipe di MATLAB selalu eksplisit: double, single, int8-uint64, char, logical, dan string berfungsi ganda sebagai fungsi konversi. Konversi ke integer membulatkan ke terdekat, sedangkan round, fix, floor, dan ceil memberi kita kendali penuh atas arah pembulatan. Kode ASCII menjembatani char dan double, num2str/str2double menjembatani angka dan teks, dan keluarga fungsi is... memvalidasi tipe sebelum data diproses.