menengahnumbermethodMenengah3 mnt baca

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:

javascript
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 plus

Number("42px") menghasilkan NaN karena stringnya tidak murni angka, sedangkan parseInt lebih toleran. Pilih sesuai kebutuhan validasimu.

Pembulatan dan format

javascript
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 atas

toFixed sering dipakai untuk menampilkan uang, tapi ingat hasilnya string. Ubah balik dengan Number() kalau mau dihitung lagi.

NaN dan Infinity

javascript
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 benar

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

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

javascript
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.