Number dan Method-nya
Bekerja dengan angka: parsing string, pembulatan, toFixed, dan konstanta seperti NaN dan Infinity.
Angka dalam JavaScript
Semua angka di JavaScript bertipe number, baik bulat maupun desimal. Tidak ada pemisahan int dan float.
Parsing: string jadi angka
Data dari input form selalu string. Untuk menghitung, ubah dulu jadi number:
console.log(Number("42")); // 42
console.log(parseInt("42px")); // 42, berhenti di karakter non-angka
console.log(parseFloat("3.14")); // 3.14
console.log(+"42"); // 42, trik unary plusNumber("42px") menghasilkan NaN karena stringnya tidak murni angka, sedangkan parseInt lebih toleran. Pilih sesuai kebutuhan validasimu.
Pembulatan dan format
let harga = 19999.987;
console.log(harga.toFixed(2)); // "19999.99", 2 desimal (string!)
console.log(Math.round(4.6)); // 5
console.log(Math.floor(4.9)); // 4, selalu ke bawah
console.log(Math.ceil(4.1)); // 5, selalu ke atastoFixed sering dipakai untuk menampilkan uang, tapi ingat hasilnya string. Ubah balik dengan Number() kalau mau dihitung lagi.
NaN dan Infinity
console.log(0 / 0); // NaN, bukan angka
console.log(1 / 0); // Infinity
console.log(Math.sqrt(-1)); // NaN
console.log(isNaN("halo")); // true (konversi dulu, hindari)
console.log(Number.isNaN("halo")); // false, lebih ketat dan benarNaN artinya operasi angka gagal. Ciri khasnya: NaN tidak sama dengan apa pun, termasuk dirinya sendiri (NaN === NaN adalah false).
Catatan teknis: Selalu pakai Number.isNaN, bukan isNaN global. isNaN lama mengkonversi argumen dulu sehingga isNaN("halo") true padahal "halo" bukan hasil operasi angka yang gagal. Number.isNaN hanya true untuk nilai NaN asli. Selalu sertakan radix di parseInt: parseInt("08", 10) untuk menghindari interpretasi oktal di lingkungan lama.
Studi kasus: kasir sederhana
Gabungkan parsing dan formatting dalam simulasi kasir:
function hitungTotal(hargaStr, jumlahStr, diskonPersen) {
let harga = Number(hargaStr);
let jumlah = parseInt(jumlahStr, 10);
if (Number.isNaN(harga) || Number.isNaN(jumlah)) {
return "Input tidak valid";
}
let total = harga * jumlah;
let bayar = total * (1 - diskonPersen / 100);
return "Total bayar: Rp" + bayar.toFixed(0);
}
console.log(hitungTotal("15000", "3", 10)); // "Total bayar: Rp40500"
console.log(hitungTotal("abc", "3", 10)); // "Input tidak valid"Alurnya selalu sama: parse input string jadi number, validasi dengan Number.isNaN, hitung, format untuk tampilan. Kuasai alur ini dan kamu siap menangani semua input angka dari form.
Batas aman number
Tipe number punya batas presisi untuk bilangan bulat besar:
console.log(Number.MAX_SAFE_INTEGER); // 9007199254740991
console.log(Number.isSafeInteger(9007199254740991)); // true
console.log(Number.isSafeInteger(9007199254740992)); // false!Di atas batas itu, 9007199254740992 dan 9007199254740993 dianggap sama. Untuk ID database besar atau kriptografi, pakai BigInt. Untuk uang dan perhitungan sehari-hari, number biasa aman-aman saja.
Kesimpulan
Alur kerja angka: parse input jadi number, hitung, format untuk tampilan. Waspadai NaN dengan Number.isNaN dan ingat toFixed mengembalikan string.