Sonlar

...

Sonlar

Zamonaviy JavaScript'da ikki turdagi sonlar mavjud:

JavaScript'dagi oddiy sonlar 64-bit format IEEE-754 (yoki "double precision floating point numbers") formatida saqlanadi. Bu ko'pchilik foydalanadigan sonlardir va biz bu bobda ularga to'liqroq nazar tashlaymiz.

BigInt sonlar esa cheksiz uzunlikdagi butun sonlarni ifodalaydi. Oddiy butun sonlar (253-1) chegarasidan oshib ketishi xavfli bo'lishi mumkin, shuning uchun BigInt'larni maxsus bo'limda ko'rib chiqamiz.

Endi oddiy sonlarga to'xtalamiz. Keling, ularni yanada chuqurroq o'rganamiz.

Sonni yozishning boshqa usullari

Tasavvur qiling, 1 milliardni yozishimiz kerak. Aniq usuli bu:

let billion = 1000000000;

Bundan tashqari, raqamlar orasida _ ajratuvchisini ishlatishimiz mumkin:

let billion = 1_000_000_000;

Bu yerda _ "syntactic sugar" rolini o'ynaydi, ya'ni sonni o'qish osonroq bo'ladi. JavaScript dvigateli _'ni raqamlar orasida e'tiborsiz qoldiradi, shuning uchun bu yuqoridagi 1 milliard bilan bir xil.

Haqiqiy hayotda uzoq zero ketma-ketliklarini yozishdan qochishga harakat qilamiz. Biz "1bn" kabi qisqartirilgan shaklda yozishga intilamiz yoki "7.3bn" 7 milliard 300 million uchun. Bu holatda, JavaScript'da raqamni qisqartirish uchun "e" harfini qo'shib, zero sonlar sonini ko'rsatish mumkin:

let billion = 1e9; // 1 milliard, literal: 1 va 9 ta zero
alert(7.3e9); // 7.3 milliard (7300000000 yoki 7_300_000_000 bilan bir xil)

Ya'ni, e raqamni 1 bilan berilgan zero soni bilan ko'paytiradi.

1e3 === 1 * 1000; // e3 * 1000 degan ma'noni anglatadi
1.23e6 === 1.23 * 1000000; // e6 * 1000000 degan ma'noni anglatadi

Endi juda kichik raqamni yozaylik. Masalan, 1 mikrosekund (bir milliondan biri):

let mcs = 0.000001;

Yana oldingi kabi, "e" yordamida ham ishlatish mumkin. Zero'larni aniq yozishdan qochish uchun quyidagicha yozishimiz mumkin:

let mcs = 1e-6; // 1'ning oldida 6 ta zero

Agar 0.000001 raqamida zero'larni sanasak, 6 ta zero bor. Shuning uchun bu 1e-6.

Ya'ni, "e"dan keyingi salbiy raqam 1'ni berilgan zero soni bilan bo'lishni anglatadi:

// -3 1'ni 3 ta zero bilan bo'ladi
1e-3 === 1 / 1000; // 0.001
 
// -6 1'ni 6 ta zero bilan bo'ladi
1.23e-6 === 1.23 / 1000000; // 0.00000123
 
// katta raqam bilan misol
1234e-2 === 1234 / 100; // 12.34, o'nlik nuqta 2 marta siljiydi

Hex, binar va oktal sonlar

Hexadecimal sonlar JavaScript'da ranglarni ifodalash, belgilarni kodlash va boshqa ko'plab joylarda keng qo'llaniladi. Shuning uchun qisqartirilgan yozish usuli mavjud: 0x va keyin raqam.

Masalan:

alert(0xff); // 255
alert(0xff); // 255 (bir xil, harf holati ahamiyatsiz)

Binar va oktal sistemalar kamroq ishlatiladi, ammo 0b va 0o prefikslari yordamida qo'llab-quvvatlanadi:

let a = 0b11111111; // 255 ning binar shakli
let b = 0o377; // 255 ning oktal shakli
 
alert(a == b); // true, ikkala tomonda ham 255

Faqat 3 ta sistemani qo'llab-quvvatlaydi. Boshqa sistemalar uchun parseInt funksiyasidan foydalanishimiz kerak.

toString(base)

num.toString(base) metodi num'ni berilgan baza sistemasi bo'yicha matn shaklida qaytaradi.

Masalan:

let num = 255;
 
alert(num.toString(16)); // ff
alert(num.toString(2)); // 11111111

Baza 2 dan 36 gacha bo'lishi mumkin. Standart baza 10 hisoblanadi.

Buni qo'llash uchun ba'zi misollar:

  • base=16 hex ranglar, belgi kodlash va boshqalar uchun ishlatiladi, raqamlar 0..9 yoki A..F bo'lishi mumkin.
  • base=2 asosan bitwise operatsiyalarni tekshirish uchun ishlatiladi, raqamlar 0 yoki 1 bo'lishi mumkin.
  • base=36 eng yuqori baza, raqamlar 0..9 yoki A..Z bo'lishi mumkin. Butun lotin alifbosi sonni ifodalash uchun ishlatiladi. 36 baza uchun kulgili, ammo foydali holat bu uzoq raqamli identifikatorni qisqartirilgan shaklda ifodalash, masalan, qisqa URL yaratish.
alert((123456).toString(36)); // 2n9c

Ikki nuqta metodni chaqirish uchun kerak. Agar biz raqamga metodni bevosita chaqirmoqchi bo'lsak, masalan toString yuqoridagi misolda, ikkita nuqta .. qo'yishimiz kerak.

Agar bitta nuqta qo'ygan bo'lsak: 123456.toString(36), unda xato yuzaga keladi, chunki JavaScript sintaksisi birinchi nuqtadan keyin o'nlik qismni nazarda tutadi. Agar bir nuqtadan ko'proq nuqta qo'ysak, JavaScript biladi, o'nlik qism bo'sh va metoddan keyin boradi.

Shuningdek (123456).toString(36) deb yozish mumkin.

Yaqinlashtirish

Sonlar bilan ishlashda eng ko'p ishlatiladigan operatsiyalardan biri yaqinchilikdir.

Bir nechta qurilgan funksiyalar mavjud:

  • Math.floor – pastga yaxlitlaydi: 3.1 3 bo'ladi, -1.1 -2 bo'ladi.
  • Math.ceil – yuqoriga yaxlitlaydi: 3.1 4 bo'ladi, -1.1 -1 bo'ladi.
  • Math.round – eng yaqin butun songa yaxlitlaydi: 3.1 3 bo'ladi, 3.6 4 bo'ladi. O'rtacha holatlarda 3.5 yuqoriga yaxlitlanadi, -3.5 yuqoriga yaxlitlanadi.
  • Math.trunc (Internet Explorer'da qo'llab-quvvatlanmaydi) – o'nlik qismni yaxlitlamasdan olib tashlaydi: 3.1 3 bo'ladi, -1.1 -1 bo'ladi.

Quyidagi jadval bu farqlarni umumlashtiradi:

Math.floorMath.ceilMath.roundMath.trunc
3.1343
3.5343
3.6343
-1.1-2-1-1
-1.5-2-1-1
-1.6-2-1-2

Bu funksiyalar sonning o'nlik qismini qanday ishlashini qamrab oladi. Ammo agar biz raqamni o'nlik nuqtadan n-chi raqamgacha yaxlitlamoqchi bo'lsak?

Masalan, bizda 1.2345 bor va uni 2 ta raqamgacha yaxlitlashni xohlaymiz, faqat 1.23

bo'lishini xohlaymiz. Bu holda toFixed(n) metodidan foydalanish mumkin:

let num = 1.2345;
 
alert(num.toFixed(2)); // 1.23, natija string sifatida qaytariladi
alert(num.toFixed(5)); // 1.23450
alert(num.toFixed(0)); // 1

Natija string shaklida qaytariladi, shuning uchun agar biz uni yana son sifatida ishlatmoqchi bo'lsak, parseFloat funksiyasidan foydalanishimiz kerak.

let num = 1.2345;
alert(parseFloat(num.toFixed(2))); // 1.23, son sifatida qaytariladi

toFixed() metodining bir kamchiligi – u yakuniy natijani avtomatik ravishda ko'paytiradi va to'liq bo'lmagan qiymatni 0'lar bilan to'ldiradi.

Yuqoridagi misolda 1.23450, 5 ta o'nlik raqamga ega. Agar biz 5 ta decimal raqam beradigan bo'lsak, 1.23450 natija sifatida qaytariladi. Agar siz to'liq qiymatni olishni xohlasangiz, yaxshiroq variant Number(num.toFixed(n)) bo'lishi mumkin, bu num ni decimaldagi n ta raqam bilan yaxlitlaydi.

let num = 1.2345;
alert(Number(num.toFixed(2))); // 1.23

Ushbu metod juda qulay va tez-tez ishlatiladi. Bu kabi o'zgarishlarni kodda qo'llashni osonlashtiradi.

Ushbu sahifada

GitHubda tahrirlash