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:
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:
0xโ o'n oltilik (hexadecimal), masalan ranglar uchun ishlatiladi;0bโ ikkilik (binary);0oโ sakkizlik (octal).
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.
Yaxlitlash
Sonlar bilan ishlashda eng ko'p kerak bo'ladigan amallardan biri โ yaxlitlash. Bir necha usul bor:
Math.floorโ pastga yaxlitlaydi:3.9โ3;Math.ceilโ yuqoriga yaxlitlaydi:3.1โ4;Math.roundโ eng yaqiniga yaxlitlaydi:3.5โ4;Math.truncโ kasr qismini shunchaki tashlaydi (yaxlitlamaydi):3.9โ3.
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 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:
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.
Yechim: taqqoslashda yoki natijani ko'rsatishda toFixed ishlatish yoki natijani yaxlitlash:
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:
isFinite(qiymat) โ qiymat oddiy chekli son ekanini tekshiradi. Ya'ni u NaN ham, Infinity ham, -Infinity ham emasligini bildiradi:
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:
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.random() โ 0 (kiritiladi) dan 1 (kiritilmaydi) gacha tasodifiy son qaytaradi. Undan foydalanib kerakli oraliqda tasodifiy son olish mumkin:
Xulosa
- Sonlarni
1e6,0x,0b,0ova_bilan qulay yozish mumkin; toString(base)โ sonni boshqa sanoq tizimidagi satrga o'giradi;- Yaxlitlash:
Math.floor/ceil/round/truncvatoFixed(n)(satr qaytaradi); 0.1 + 0.2 !== 0.3โ bu ikkilik saqlash natijasi, JavaScript xatosi emas;isNaN,isFiniteโ maxsus son qiymatlarini tekshiradi;parseInt/parseFloatโ satr boshidan sonni ajratib oladi;Mathโ matematik funksiyalar (sqrt,pow,max,random).