← Kembali ke kursus
Pelajaran kursus · JavaScript
Pelajaran 07

Number dan Math

parseInt, parseFloat, NaN, Infinity, Math object, Number formatting.

Pahami konsepnya

JavaScript tidak membedakan int dan float — semua number adalah IEEE 754 double. Ini menghasilkan jebakan klasik: 0.1 + 0.2 === 0.3 adalah FALSE karena floating-point imprecision. Solusinya: Number.EPSILON untuk perbandingan, atau bekerja dalam satuan integer (sen, bukan rupiah).

NaN (Not a Number) adalah hasil operasi matematika gagal: 0/0, "abc" * 2, Math.sqrt(-1). NaN === NaN adalah FALSE — satu-satunya nilai yang tidak sama dengan dirinya. Periksa dengan isNaN() atau Number.isNaN(). Infinity hasil pembagian dengan nol: 1/0 → Infinity.

Math object: Math.round, Math.floor, Math.ceil, Math.abs, Math.max/min, Math.random (0-1 eksklusif), Math.pow, Math.sqrt, Math.trunc. Format angka: toFixed(2) untuk dua desimal (menghasilkan STRING), toLocaleString("id-ID") untuk pemisah ribuan.

Coba contoh kode

console.log(0.1 + 0.2);           // 0.30000000000000004
console.log(0.1 + 0.2 === 0.3);   // false!
console.log(Math.abs(0.1 + 0.2 - 0.3) < Number.EPSILON);  // true

console.log(parseInt("42px"));      // 42
console.log(parseFloat("3.14m"));   // 3.14
console.log(Number("42"));          // 42

console.log(Math.floor(3.7), Math.ceil(3.2));  // 3 4
console.log((1234567).toLocaleString("id-ID")); // 1.234.567
console.log((3.14159).toFixed(2));  // "3.14" — string!

Jebakan 0.1+0.2 bukan bug JavaScript — semua bahasa IEEE 754 mengalaminya. toFixed mengembalikan STRING; Number(...) kembali ke number. parseInt berhenti di karakter non-angka pertama.

Latihan singkat

Uji: Math.max(3,8,1,9,4) — harus `9`.