Tentu, ini adalah artikel mengenai cara membuat fungsi terbilang dengan JavaScript.
Dalam pengembangan aplikasi web, terkadang kita perlu menampilkan nilai numerik dalam bentuk kata, seperti pada kwitansi, faktur, atau laporan keuangan. Fungsi yang melakukan konversi ini sering disebut “terbilang”.
Pada tutorial ini, kita akan membuat fungsi terbilang() di JavaScript yang dapat mengubah angka menjadi kata, misalnya:
123menjadi"seratus dua puluh tiga"15000menjadi"lima belas ribu"123456789menjadi"seratus dua puluh tiga juta empat ratus lima puluh enam ribu tujuh ratus delapan puluh sembilan"
1. Strategi Dasar
Logika utama di balik fungsi ini adalah memecah angka menjadi kelompok tiga digit (ratusan, puluhan, satuan) dari kanan ke kiri. Kita akan membuat fungsi pembantu untuk mengonversi setiap kelompok tiga digit tersebut, lalu menggabungkannya dengan satuan ribuan, jutaan, dan seterusnya.
2. Implementasi Kode
Mari kita mulai dengan membuat file JavaScript baru atau menambahkannya ke dalam tag <script> di file HTML Anda.
Langkah 1: Siapkan Array Kata
Kita akan mendefinisikan beberapa array untuk menyimpan kata-kata dasar yang diperlukan.
const satuan = ['', 'satu', 'dua', 'tiga', 'empat', 'lima', 'enam', 'tujuh', 'delapan', 'sembilan'];
const belasan = ['sepuluh', 'sebelas', 'dua belas', 'tiga belas', 'empat belas', 'lima belas', 'enam belas', 'tujuh belas', 'delapan belas', 'sembilan belas'];
const puluhan = ['', 'sepuluh', 'dua puluh', 'tiga puluh', 'empat puluh', 'lima puluh', 'enam puluh', 'tujuh puluh', 'delapan puluh', 'sembilan puluh'];
const ribuan = ['', 'ribu', 'juta', 'milyar', 'triliun'];
Langkah 2: Buat Fungsi Pembantu terbilangTigaDigit()
Fungsi ini akan menangani konversi angka dari 0 hingga 999. Ini adalah inti dari logika kita.
function terbilangTigaDigit(n) {
let result = '';
const nStr = String(n).padStart(3, '0');
const ratus = parseInt(nStr[0]);
const puluh = parseInt(nStr[1]);
const satu = parseInt(nStr[2]);
// Proses ratusan
if (ratus === 1) {
result += 'seratus ';
} else if (ratus > 1) {
result += satuan[ratus] + ' ratus ';
}
// Proses puluhan dan belasan
if (puluh === 1) {
if (satu === 0) {
result += 'sepuluh ';
} else {
result += belasan[satu] + ' ';
}
} else if (puluh > 1) {
result += satuan[puluh] + ' puluh ';
}
// Proses satuan
if (puluh !== 1 && satu !== 0) {
result += satuan[satu] + ' ';
}
return result.trim();
}
Langkah 3: Buat Fungsi Utama terbilang()
Fungsi utama ini akan mengambil angka yang lebih besar, membaginya menjadi kelompok tiga digit, dan menggunakan terbilangTigaDigit() untuk setiap kelompok.
function terbilang(n) {
let number = Math.abs(n);
let hasil = '';
let i = 0;
if (number === 0) {
return 'nol';
}
// Loop selama angka masih lebih besar dari 0
do {
const sisa = number % 1000;
if (sisa !== 0) {
let temp = terbilangTigaDigit(sisa);
// Tambahkan "ribu" atau "juta"
if (i === 1 && sisa === 1) {
temp = "seribu";
} else {
temp += ribuan[i];
}
hasil = temp + ' ' + hasil;
}
// Pindah ke kelompok tiga digit berikutnya
number = Math.floor(number / 1000);
i++;
} while (number > 0);
// Hapus spasi ekstra di awal atau akhir
let finalResult = hasil.trim();
// Handle kasus negatif
if (n < 0) {
finalResult = "minus " + finalResult;
}
return finalResult;
}
3. Kode Lengkap dan Contoh Penggunaan
Berikut adalah kode lengkap yang bisa langsung Anda coba:
const satuan = ['', 'satu', 'dua', 'tiga', 'empat', 'lima', 'enam', 'tujuh', 'delapan', 'sembilan'];
const belasan = ['sepuluh', 'sebelas', 'dua belas', 'tiga belas', 'empat belas', 'lima belas', 'enam belas', 'tujuh belas', 'delapan belas', 'sembilan belas'];
const puluhan = ['', 'sepuluh', 'dua puluh', 'tiga puluh', 'empat puluh', 'lima puluh', 'enam puluh', 'tujuh puluh', 'delapan puluh', 'sembilan puluh'];
const ribuan = ['', 'ribu', 'juta', 'milyar', 'triliun'];
function terbilangTigaDigit(n) {
let result = '';
const nStr = String(n).padStart(3, '0');
const ratus = parseInt(nStr[0]);
const puluh = parseInt(nStr[1]);
const satu = parseInt(nStr[2]);
if (ratus === 1) {
result += 'seratus ';
} else if (ratus > 1) {
result += satuan[ratus] + ' ratus ';
}
if (puluh === 1) {
if (satu === 0) {
result += 'sepuluh ';
} else {
result += belasan[satu] + ' ';
}
} else if (puluh > 1) {
result += satuan[puluh] + ' puluh ';
}
if (puluh !== 1 && satu !== 0) {
result += satuan[satu] + ' ';
}
return result.trim();
}
function terbilang(n) {
let number = Math.abs(n);
let hasil = '';
let i = 0;
if (number === 0) {
return 'nol';
}
do {
const sisa = number % 1000;
if (sisa !== 0) {
let temp = terbilangTigaDigit(sisa);
if (i === 1 && sisa === 1) {
temp = "seribu";
} else {
temp += ribuan[i];
}
hasil = temp + ' ' + hasil;
}
number = Math.floor(number / 1000);
i++;
} while (number > 0);
let finalResult = hasil.trim();
if (n < 0) {
finalResult = "minus " + finalResult;
}
return finalResult;
}
// Contoh penggunaan
console.log(terbilang(123)); // Output: seratus dua puluh tiga
console.log(terbilang(15000)); // Output: lima belas ribu
console.log(terbilang(100)); // Output: seratus
console.log(terbilang(1000)); // Output: seribu
console.log(terbilang(123456789)); // Output: seratus dua puluh tiga juta empat ratus lima