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:

matlab
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:

text
class double(true) : double
class single(5)    : single
class logical(5)   : logical
double(true) : 1
logical(5)   : 1

Mari kita bedah baris-baris kode di atas:

  1. Baris 1 (double(true)): logical menjadi double dengan nilai 1 — representasi numerik true.
  2. Baris 3 (logical(5)): angka 5 (double) menjadi logical dengan aturan nonzero is true; hasilnya 1 (kelas logical).
  3. 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:

FungsiPerilakuContohHasil
roundke bilangan bulat terdekat; nilai setengah menjauhi nolround(2.5), round(-2.5)3, -3
fixke arah nol (membuang desimal)fix(2.9), fix(-2.9)2, -2
floorke bawah (arah minus tak hingga)floor(2.1), floor(-2.1)2, -3
ceilke 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:

matlab
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:

text
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)  : -2

Mari kita bedah baris-baris kode di atas:

  1. Baris 1-2 (int8(...)): konversi langsung membulatkan ke terdekat — 2.9 naik ke 3, -2.7 turun ke -3. Ini bukan pemotongan; fix barulah yang memotong.
  2. Baris 4-5 (round): nilai setengah dibulatkan menjauhi nol — 2.5 menjadi 3 dan -2.5 menjadi -3.
  3. Baris 6-7 (fix): pemotongan ke arah nol — 2.9 menjadi 2 dan -2.9 menjadi -2.
  4. 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:

matlab
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:

text
double('A') : 65
char(97)     : a
char('A'+1) : B

Mari kita bedah baris-baris kode di atas:

  1. Baris 1 (double('A')): kode ASCII huruf A adalah 65.
  2. Baris 2 (char(97)): angka 97 adalah huruf kecil a — kode ASCII mengikuti urutan huruf, sehingga a (97) berada 32 langkah setelah A (65).
  3. Baris 3 (char('A' + 1)): penjumlahan 'A' + 1 berlangsung sebagai 65 + 1 = 66 di kelas double; char(66) mengembalikannya menjadi huruf B.

Untuk kebutuhan yang lebih umum — menggabungkan angka ke dalam teks, atau membaca angka dari teks — MATLAB menyediakan num2str() dan str2double():

matlab
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:

text
num2str(3.14) : 3.14 (class char)
str2double    : 2.5

Fungsi 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():

matlab
fprintf('isnumeric(5)    : %d\n', isnumeric(5));
fprintf('ischar(''halo'') : %d\n', ischar('halo'));
fprintf('islogical(true) : %d\n', islogical(true));

Output yang Dihasilkan:

text
isnumeric(5)    : 1
ischar('halo') : 1
islogical(true) : 1

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