Ma'lumot turlari

Sonlar

Zamonaviy JavaScript'da sonlarning ikki turi bor: oddiy sonlar (number) va juda katta butun sonlar (bigint). Ushbu darsda asosan oddiy sonlar bilan ishlashni chuqur o'rganamiz.

Sonlarni yozishning ko'p usullari

Katta sonni yozganda uni o'qish qiyin bo'ladi. Masalan, million: 1000000. Nollarni sanashga to'g'ri keladi. Buning uchun bir nechta qulay usul bor.

Birinchisi โ€” nollar o'rniga e harfidan foydalanish. e undan keyingi nol sonini bildiradi:

son-yozuv.js
// natija shu yerda chiqadi

Ikkinchisi โ€” o'rinlar orasiga ajratuvchi ostki chiziq _ qo'yish. U shunchaki bezak, JavaScript uni e'tiborsiz qoldiradi, lekin sonni o'qishni osonlashtiradi:

let million = 1_000_000;  // 1000000 bilan bir xil
console.log(million);

Boshqa sanoq tizimlari

Sonlarni turli sanoq tizimlarida yozish mumkin, buning uchun maxsus prefikslar bor:

sanoq-tizimi.js
// natija shu yerda chiqadi

toString(base) โ€” sonni matnga o'girish

num.toString(base) metodi sonni berilgan sanoq tizimidagi base asosidagi satr ko'rinishida qaytaradi. base 2 dan 36 gacha bo'lishi mumkin, standart qiymat 10.

tostring-base.js
// natija shu yerda chiqadi
36-asos maksimal โ€” bunda 0-9 raqamlar va a-z lotin harflari ishlatiladi. Uni uzun raqamli identifikatorni qisqartirish uchun ishlatish mumkin.

Yaxlitlash

Sonlar bilan ishlashda eng ko'p kerak bo'ladigan amallardan biri โ€” yaxlitlash. Bir necha usul bor:

yaxlitlash.js
// natija shu yerda chiqadi

Sonni kasrdan keyingi ma'lum belgigacha yaxlitlash uchun ikki asosiy yo'l bor. Birinchisi โ€” toFixed(n) metodi. U sonni n ta kasr belgisiga yaxlitlaydi va satr qaytaradi:

tofixed.js
// natija shu yerda chiqadi
Agar toFixed natijasini yana son sifatida ishlatmoqchi bo'lsangiz, uni Number(...) yoki oldiga + qo'yib songa qaytaring: +pi.toFixed(2).

Aniqlik muammosi: 0.1 + 0.2

JavaScript'dagi eng mashhur "g'alati" hodisalardan biri โ€” bu quyidagi natija:

aniqlik.js
// natija shu yerda chiqadi

Bu JavaScript'ning xatosi emas! Sabab shundaki, sonlar xotirada ikkilik (binary) formatda saqlanadi. 0.1, 0.2 kabi kasrlar ikkilik tizimda cheksiz davriy kasrga aylanadi โ€” xuddi biz o'nlik tizimda 1/3ni 0.333... deb aniq yoza olmasligimizdek. Shuning uchun ozgina yaxlitlash xatosi paydo bo'ladi.

Bu muammo faqat JavaScript'da emas โ€” Python, Java, C va boshqa deyarli barcha tillarda ham bor, chunki ular bir xil (IEEE-754) standart formatdan foydalanadi.

Yechim: taqqoslashda yoki natijani ko'rsatishda toFixed ishlatish yoki natijani yaxlitlash:

aniqlik-yechim.js
// natija shu yerda chiqadi
Pul bilan ishlaganda bu muammo jiddiy bo'ladi. Ko'pincha summani eng kichik birlikda (masalan, tiyin/sent) butun son sifatida saqlash va faqat ko'rsatishda bo'lish tavsiya etiladi.

isNaN va isFinite

Sonlar bilan ishlashda ikki maxsus qiymat bor: NaN (Not a Number โ€” "son emas") va Infinity (cheksizlik). Ularni tekshirish uchun maxsus funksiyalar mavjud.

isNaN(qiymat) โ€” qiymatni songa o'giradi va u NaN emasligini tekshiradi. Nega alohida funksiya kerak? Chunki NaN o'z-o'ziga ham teng emas:

isnan.js
// natija shu yerda chiqadi

isFinite(qiymat) โ€” qiymat oddiy chekli son ekanini tekshiradi. Ya'ni u NaN ham, Infinity ham, -Infinity ham emasligini bildiradi:

isfinite.js
// natija shu yerda chiqadi
Aniqroq tekshirish uchun Number.isNaN va Number.isFinite ham bor. Ular qiymatni songa o'girmaydi, faqat u haqiqatan son turida ekanini tekshiradi. Masalan, Number.isNaN("matn") โ†’ false, chunki "matn" satr, NaN emas.

parseInt va parseFloat

Number(qiymat) orqali o'girish qat'iy: agar satr toza son bo'lmasa, natija NaN bo'ladi. Masalan, "100px"ni songa o'gira olmaydi.

parseInt va parseFloat esa "yumshoqroq": ular satrni boshidan o'qib, imkoni boricha ko'proq sonni ajratib oladi va son bo'lmagan belgida to'xtaydi:

parseint.js
// natija shu yerda chiqadi
parseIntning ikkinchi argumenti โ€” sanoq tizimi asosi. Masalan, parseInt("ff", 16) โ†’ 255. O'n oltilik satrlarni o'qishda juda foydali.

Math obyekti

Math โ€” matematik funksiyalar va konstantalar to'plami bo'lgan o'rnatilgan obyekt. Eng ko'p ishlatiladiganlari:

math.js
// natija shu yerda chiqadi

Math.random() โ€” 0 (kiritiladi) dan 1 (kiritilmaydi) gacha tasodifiy son qaytaradi. Undan foydalanib kerakli oraliqda tasodifiy son olish mumkin:

random.js
// natija shu yerda chiqadi

Xulosa