Bab 09: Number dan Representasi Angka di JavaScript

— Saat Angka Tak Lagi Sekadar “1, 2, 3…”—
Kalau kamu pernah ngerasa heran kenapa 0.1 + 0.2 !== 0.3 di JavaScript… selamat! Kamu bukan sendirian dan kamu juga bukan salah ngoding. Itu cuma JavaScript yang lagi nunjukin sifat aslinya: penuh kejutan, kadang bikin geleng-geleng, tapi tetap jadi andalan developer di seluruh dunia.
Di bab ini, kita bakal kupas tuntas segala hal tentang Number di JavaScript mulai dari cara kerja dasarnya, metode-metode keren buat manipulasi angka, sampai trik menghadapi angka super besar pakai BigInt. Bahkan, kita juga bakal nyemplung sebentar ke dunia bitwise, tempat para programmer suka berpura-pura jadi hacker Hollywood (padahal cuma geser-geser bit.
Artikel ini ditulis dengan gaya santai, contoh kode yang bisa langsung dicoba, dan tentu saja — tanpa drama berlebihan. Karena belajar pemrograman itu harus menyenangkan, bukan bikin stres!
Yuk, kita mulai petualangan angka-angka ini!
Daftar Isi
Mengenal Number di JavaScript
Di JavaScript, semua angka — baik itu integer (42) maupun desimal (3.14159) — disimpan dalam satu tipe data: Number. Tidak ada int, float, atau double seperti di bahasa lain. Semua angka di JS adalah floating-point 64-bit sesuai standar IEEE 754.
Ya, artinya… semua angka itu desimal, bahkan kalau kamu tulis 5. Dan inilah akar dari masalah 0.1 + 0.2 !== 0.3:
console.log(0.1 + 0.2); // → 0.30000000000000004
console.log(0.1 + 0.2 === 0.3); // → false 😱Kenapa? Karena angka desimal seperti 0.1 tidak bisa direpresentasikan secara eksak dalam biner. Mirip kayak kamu coba tulis 1/3 dalam desimal: hasilnya 0.333... yang tak pernah berakhir.
Tapi tenang! Ada cara mengatasinya:
- Gunakan
Number.EPSILONuntuk perbandingan hampir sama. - Atau bulatkan hasilnya:
(0.1 + 0.2).toFixed(1)→"0.3"(tapi hati-hati, ini string!).
JavaScript juga punya nilai khusus:
Infinitydan-InfinityNaN(Not-a-Number) — misalnya hasil dari0 / 0
console.log(1 / 0); // → Infinity
console.log(-1 / 0); // → -Infinity
console.log(0 / 0); // → NaN
console.log(typeof NaN); // → "number" (yes, really!)💡 Fun fact:
NaNitu unik karena ia tidak sama dengan apa pun — bahkan dirinya sendiri!JavaScriptconsole.log(NaN === NaN); // → false console.log(isNaN(NaN)); // → true
Mengolah Angka dengan Number Methods
Objek Number punya banyak metode bawaan yang berguna banget buat format, konversi, atau validasi angka. Berikut yang paling sering dipakai:
Number.isInteger(value)
Cek apakah nilai benar-benar integer (dan tipe number):
console.log(Number.isInteger(42)); // → true
console.log(Number.isInteger(42.0)); // → true (karena 42.0 == 42)
console.log(Number.isInteger("42")); // → false (string!)Number.isNaN(value)
Lebih aman daripada global isNaN() karena tidak melakukan coercion:
console.log(isNaN("hello")); // → true (karena "hello" di-coerce jadi NaN)
console.log(Number.isNaN("hello")); // → false (bukan number!)
console.log(Number.isNaN(NaN)); // → true ✅Number.parseFloat() & Number.parseInt()
Konversi string ke angka:
console.log(Number.parseFloat("3.14abc")); // → 3.14
console.log(Number.parseInt("42px")); // → 42
console.log(Number.parseInt("0xFF", 16)); // → 255 (hex ke desimal)num.toFixed(digits)
Bulatkan ke jumlah desimal tertentu (hasilnya string!):
let pi = 3.14159;
console.log(pi.toFixed(2)); // → "3.14"
console.log(typeof pi.toFixed(2)); // → "string"num.toPrecision(precision)
Atur jumlah digit signifikan:
let x = 123.456;
console.log(x.toPrecision(3)); // → "123"
console.log(x.toPrecision(5)); // → "123.46"⚠️ Peringatan: Metode seperti
.toFixed()dan.toPrecision()mengembalikan string, bukan number. Jangan lupa konversi balik pakaiNumber()kalau butuh operasi matematika lanjutan!
Properti Penting pada Number
Selain metode, objek Number juga menyediakan properti konstan yang sangat berguna:
| Properti | Nilai | Kegunaan |
|---|---|---|
Number.MAX_VALUE | ~1.79e+308 | Angka positif terbesar yang bisa direpresentasikan |
Number.MIN_VALUE | ~5e-324 | Angka positif terkecil (> 0) |
Number.MAX_SAFE_INTEGER | 9007199254740991 (2^53 - 1) | Integer terbesar yang aman |
Number.MIN_SAFE_INTEGER | -9007199254740991 | Integer terkecil yang aman |
Number.EPSILON | 2.220446049250313e-16 | Selisih terkecil antara 1 dan angka berikutnya |
Contoh penggunaan EPSILON untuk membandingkan floating point:
function isEqual(a, b) {
return Math.abs(a - b) < Number.EPSILON;
}
console.log(isEqual(0.1 + 0.2, 0.3)); // → true ✅🔍 Catatan Keamanan & Best Practice:
Jangan pernah gunakan angka melebihiMAX_SAFE_INTEGERuntuk ID, indeks, atau operasi yang butuh presisi tinggi — risiko overflow dan kehilangan akurasi sangat nyata!
Referensi Lengkap Number Object
Berikut ringkasan lengkap metode dan properti utama Number:
Konstruktor
new Number(value)→ Jangan pakai! Ini membuat objek wrapper, bukan primitive. Lebih baik pakaiNumber(value)sebagai fungsi.
Metode Statis
Number.isFinite(value)Number.isInteger(value)Number.isNaN(value)Number.isSafeInteger(value)Number.parseFloat(string)Number.parseInt(string, radix)
Properti Statis
Number.EPSILONNumber.MAX_VALUENumber.MIN_VALUENumber.MAX_SAFE_INTEGERNumber.MIN_SAFE_INTEGERNumber.NEGATIVE_INFINITYNumber.POSITIVE_INFINITYNumber.NaN
Metode Instance (dipanggil dari angka)
num.toString(radix)num.toFixed(digits)num.toExponential(fractionDigits)num.toPrecision(precision)num.valueOf()→ kembalikan nilai primitif
Contoh konversi basis:
let angka = 255;
console.log(angka.toString(2)); // → "11111111" (biner)
console.log(angka.toString(16)); // → "ff" (heksadesimal)Operasi Bitwise pada Angka JavaScript
JavaScript mendukung operasi bitwise seperti bahasa low-level, meski semua angka tetap disimpan sebagai float. Saat kamu pakai operator bitwise, JS sementara mengonversi angka ke signed 32-bit integer, lalu mengembalikannya ke float setelah operasi.
Operator bitwise umum:
&(AND)|(OR)^(XOR)~(NOT)<<(shift kiri)>>(shift kanan aritmatika)>>>(shift kanan logis)
Contoh praktis:
// Cek apakah genap
function isEven(n) {
return (n & 1) === 0;
}
console.log(isEven(4)); // → true
console.log(isEven(7)); // → false
// Kalikan 2 pakai shift
let x = 5;
console.log(x << 1); // → 10 (5 * 2)
// Bagi 2 (pembulatan ke bawah)
console.log(13 >> 1); // → 6🛑 Peringatan: Bitwise hanya aman untuk angka dalam rentang -2³¹ sampai 2³¹ – 1. Angka di luar itu akan dipotong!
Dan ya… ini bukan tempat buat optimasi performa di JS modern. V8 dan engine lain sudah sangat pintar. Tapi bitwise tetap keren buat coding challenge atau flag system!
Bekerja dengan Angka Besar Menggunakan BigInt
Saat kamu butuh angka lebih besar dari Number.MAX_SAFE_INTEGER, JavaScript punya solusi: BigInt.
Cara buat BigInt:
- Tambahkan
ndi akhir literal:1234567890123456789012345678901234567890n - Atau pakai fungsi:
BigInt("1234567890123456789012345678901234567890")
Contoh:
const bigNum = 9007199254740991n; // MAX_SAFE_INTEGER sebagai BigInt
const bigger = bigNum + 100n;
console.log(bigger); // → 9007199254740991100n
// Operasi matematika dasar didukung
console.log(2n ** 100n); // → 1267650600228229401496703205376nHal penting tentang BigInt:
- Tidak bisa dicampur dengan
Number:1n + 1→ error! - Tidak punya metode seperti
.toFixed() - Bisa dibandingkan dengan
Number(tapi tidak strict equal):
console.log(1n == 1); // → true
console.log(1n === 1); // → falseKapan pakai BigInt?
- Kriptografi
- ID unik super panjang
- Perhitungan astronomi/finansial ekstrem
🌟 Tip: Jika kamu pakai database atau API eksternal, pastikan sistem lain juga mendukung angka besar — karena JSON tidak punya tipe
BigInt! Biasanya dikirim sebagai string.
Penutup
Nah, Bos… sekarang kamu udah jago main angka di JavaScript! Dari 0.1 + 0.2 yang bikin pusing, sampai BigInt yang bisa hitung jumlah bintang di alam semesta (mungkin), kamu siap hadapi semua tantangan numerik.
Ingat: JavaScript mungkin aneh, tapi dia konsisten dalam keanehannya. Pelajari polanya, manfaatkan tool-nya, dan jangan takut eksperimen.
Kalau kamu nemu bug aneh soal angka, cek dulu:
“Apakah ini IEEE 754 lagi iseng… atau aku yang kurang kopi?”
Semoga artikel ini membantu. Jangan lupa coba semua contohnya di console browsermu karena coding itu seperti masak: enaknya baru ketahuan pas dicoba!.