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:

JavaScript
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.EPSILON untuk perbandingan hampir sama.
  • Atau bulatkan hasilnya: (0.1 + 0.2).toFixed(1)"0.3" (tapi hati-hati, ini string!).

JavaScript juga punya nilai khusus:

  • Infinity dan -Infinity
  • NaN (Not-a-Number) — misalnya hasil dari 0 / 0
JavaScript
console.log(1 / 0);       // → Infinity
console.log(-1 / 0);      // → -Infinity
console.log(0 / 0);       // → NaN
console.log(typeof NaN);  // → "number" (yes, really!)

💡 Fun fact: NaN itu unik karena ia tidak sama dengan apa pun — bahkan dirinya sendiri!

JavaScript
console.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):

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

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

JavaScript
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!):

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

JavaScript
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 pakai Number() kalau butuh operasi matematika lanjutan!


Properti Penting pada Number

Selain metode, objek Number juga menyediakan properti konstan yang sangat berguna:

PropertiNilaiKegunaan
Number.MAX_VALUE~1.79e+308Angka positif terbesar yang bisa direpresentasikan
Number.MIN_VALUE~5e-324Angka positif terkecil (> 0)
Number.MAX_SAFE_INTEGER9007199254740991 (2^53 - 1)Integer terbesar yang aman
Number.MIN_SAFE_INTEGER-9007199254740991Integer terkecil yang aman
Number.EPSILON2.220446049250313e-16Selisih terkecil antara 1 dan angka berikutnya

Contoh penggunaan EPSILON untuk membandingkan floating point:

JavaScript
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 melebihi MAX_SAFE_INTEGER untuk 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 pakai Number(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.EPSILON
  • Number.MAX_VALUE
  • Number.MIN_VALUE
  • Number.MAX_SAFE_INTEGER
  • Number.MIN_SAFE_INTEGER
  • Number.NEGATIVE_INFINITY
  • Number.POSITIVE_INFINITY
  • Number.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:

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

JavaScript
// 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 n di akhir literal: 1234567890123456789012345678901234567890n
  • Atau pakai fungsi: BigInt("1234567890123456789012345678901234567890")

Contoh:

JavaScript
const bigNum = 9007199254740991n; // MAX_SAFE_INTEGER sebagai BigInt
const bigger = bigNum + 100n;
console.log(bigger); // → 9007199254740991100n

// Operasi matematika dasar didukung
console.log(2n ** 100n); // → 1267650600228229401496703205376n

Hal penting tentang BigInt:

  • Tidak bisa dicampur dengan Number: 1n + 1 → error!
  • Tidak punya metode seperti .toFixed()
  • Bisa dibandingkan dengan Number (tapi tidak strict equal):
JavaScript
  console.log(1n == 1);  // → true
  console.log(1n === 1); // → false

Kapan 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!.

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *