# JavaScript sonlar va Math obyekti

> JavaScript'da sonlar bilan ishlash: yaxlitlash, kasr aniqligi, Math metodlari, tasodifiy son va matnni songa o'girish usullari. Misollar bilan.

Manba: https://learncode.uz/javascript/sonlar-math/
Sana: 2026-05-30

Narx hisoblash, foiz, o'rtacha qiymat, tasodifiy tanlov — bularning barchasi
sonlar bilan ishlashni talab qiladi.

## Butun va kasr

JavaScript'da bitta son turi bor — `number`:

```js
console.log(typeof 42);
console.log(typeof 19.99);
console.log(10 / 4);
console.log(10 / 3);
```

## Kasr aniqligi

```js
console.log(0.1 + 0.2);
console.log(0.1 + 0.2 === 0.3);
console.log((0.1 + 0.2).toFixed(2));
```

> **0.1 + 0.2 nega 0.3 emas**
>
> Kompyuter kasr sonlarni ikkilik sanoqda saqlaydi va `0.1` ni aniq ifodalab
> bo'lmaydi — xuddi `1/3` ni o'nlik kasrda aniq yozib bo'lmagani kabi. Bu
> JavaScript kamchiligi emas, deyarli barcha tillarda shunday.
>
> **Pul bilan ishlashda** kasr o'rniga eng kichik birlikni butun son sifatida
> saqlang: so'm o'rniga tiyin, dollar o'rniga sent.

## toFixed — ko'rsatish uchun yaxlitlash

```js
const price = 15000.456;

console.log(price.toFixed(0));
console.log(price.toFixed(2));
console.log(typeof price.toFixed(2));
```

`toFixed` **matn** qaytaradi — hisobda emas, faqat ko'rsatishda ishlating.

## Math — matematik metodlar

```js
console.log(Math.round(4.5));
console.log(Math.round(4.4));
console.log(Math.floor(4.9));
console.log(Math.ceil(4.1));
console.log(Math.abs(-7));
```

| Metod | Vazifasi |
|---|---|
| `Math.round()` | eng yaqin butunga |
| `Math.floor()` | pastga (kasrni tashlaydi) |
| `Math.ceil()` | yuqoriga |
| `Math.abs()` | musbat qiymat |

## Eng katta va eng kichik

```js
console.log(Math.max(3, 7, 2));
console.log(Math.min(3, 7, 2));

const scores = [85, 92, 78];
console.log(Math.max(...scores));
console.log(Math.min(...scores));
```

`...` — **spread** operatori: massivni alohida argumentlarga yoyadi.
[ES6 darsida](https://learncode.uz/javascript/es6-sintaksis) batafsil ko'ramiz.

## Daraja va ildiz

```js
console.log(2 ** 10);
console.log(Math.pow(2, 10));
console.log(Math.sqrt(144));
```

## Tasodifiy son

```js
console.log(Math.random());
console.log(Math.floor(Math.random() * 6) + 1);
```

`Math.random()` 0 dan 1 gacha kasr beradi (1 kirmaydi). Kerakli oraliqqa
o'tkazish uchun:

```js
// min dan max gacha (ikkalasi ham kiradi)
Math.floor(Math.random() * (max - min + 1)) + min
```

```js
function randomBetween(min, max) {
  return Math.floor(Math.random() * (max - min + 1)) + min;
}

for (let i = 0; i < 5; i++) {
  console.log(randomBetween(1, 10));
}
```

Massivdan tasodifiy element:

```js
const fruits = ["olma", "banan", "uzum", "shaftoli"];
const selected = fruits[Math.floor(Math.random() * fruits.length)];

console.log(selected);
```

## Matnni songa o'girish

```js
console.log(Number("42"));
console.log(parseInt("42px"));
console.log(parseFloat("19.99 so'm"));
console.log(Number("42px"));
```

- `Number()` — butun matn son bo'lishi kerak, aks holda `NaN`;
- `parseInt`/`parseFloat` — boshidagi sonni ajratib oladi.

## NaN — son emas

```js
const result = Number("salom");

console.log(result);
console.log(typeof result);
console.log(isNaN(result));
console.log(Number.isNaN(result));
```

`NaN` — "Not a Number". Uni tekshirish uchun `Number.isNaN()` ishlating
(eski `isNaN()` matnni ham songa o'girib ko'radi va chalg'itadi).

## Amaliy mashq

Hisob-kitob yozing:

1. Narx va donadan jami summani hisoblang;
2. 12% soliqni qo'shib, `toFixed(2)` bilan chiqaring;
3. `Math.round` bilan yaxlitlang;
4. `tasodif(1, 100)` funksiyasini yozing va 5 marta chaqiring;
5. ballar massividan eng yuqorisini `Math.max` bilan toping;
6. `0.1 + 0.2 === 0.3` ni tekshiring va `toFixed` bilan tuzating.

## Qisqacha xulosa

- JavaScript'da bitta son turi — `number` (butun va kasr birga).
- `0.1 + 0.2 !== 0.3` — kasr aniqligi cheklovi; pulni butun birlikda saqlang.
- `toFixed(n)` **matn** qaytaradi — faqat ko'rsatish uchun.
- `Math.round`, `floor`, `ceil`, `abs`, `max`, `min`, `sqrt`.
- `Math.random()` 0–1 oralig'ida; kerakli oraliqqa formula bilan o'tkaziladi.
- `Number()`, `parseInt()`, `parseFloat()`; `NaN` ni `Number.isNaN()` bilan tekshiring.

Keyingi darsda [sana va vaqt](https://learncode.uz/javascript/sana-vaqt) bilan ishlashni ko'ramiz.
