Skip to content

Commit e1afd42

Browse files
authored
Merge pull request #703 from Andrii256/01-05-02-number
Fix number (01-05-02)
2 parents 1afb22e + 26337d7 commit e1afd42

File tree

1 file changed

+26
-26
lines changed

1 file changed

+26
-26
lines changed

1-js/05-data-types/02-number/article.md

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ let billion = 1_000_000_000;
3131
```js run
3232
let billion = 1e9; // 1 мільярд, буквально: 1 та 9 нулів
3333

34-
alert( 7.3e9 ); // 7.3 мільярдів (таке ж саме що 7300000000 чи 7_300_000_000)
34+
alert( 7.3e9 ); // 7.3 мільярдів (те ж саме, що й 7300000000 чи 7_300_000_000)
3535
```
3636

3737
Іншими словами, `"e"` помножує число на `1` із заданим числом нулів.
@@ -89,30 +89,30 @@ let b = 0o377; // вісімкова форма 255
8989
alert( a == b ); // true, те саме число 255 з обох сторін
9090
```
9191

92-
Є лише 3 системи числення з такою підтримкою. Для інших систем числення ми повинні використовувати функцію `parseInt` (яку ми побачимо далі в цьому розділі).
92+
Таким способом підтримуються лише 3 системи числення. Для інших систем числення ми повинні використовувати функцію `parseInt` (яку ми побачимо далі в цьому розділі).
9393

9494
## toString(base)
9595

96-
Метод `num.toString(base)` повертає рядкове представлення `num` в системі числення із заданим `base`.
96+
Метод `num.toString(base)` повертає `num` у вигляді рядка, в якому вказане це ж число, але в системі числення із заданим `base`.
9797

9898
Наприклад:
9999
```js run
100100
let num = 255;
101101

102-
alert( num.toString(16) ); // ff
103-
alert( num.toString(2) ); // 11111111
102+
alert( num.toString(16) ); // "ff"
103+
alert( num.toString(2) ); // "11111111"
104104
```
105105

106106
`base` може бути від `2` до `36`. За замовчуванням це `10`.
107107

108108
Загальні випадки використання для цього є:
109109

110110
- **base=16** використовується для шістнадцяткових кольорів, кодування символів тощо, цифри можуть бути `0..9` або `A..F`.
111-
- **base=2** в основному для налагодження бітових операцій, цифри можуть бути `0` або `1`.
112-
- **base=36** є максимальним, цифри можуть бути `0..9` або `A..Z`. Весь латинський алфавіт використовується для позначення числа. Комічно, але користь від системи для найбільших чисел полягає у перетворенні довгого числового ідентифікатора у щось коротше, наприклад, для генерації короткого URL. Для цього достатньо представити його в системі числення з базою `36`:
111+
- **base=2** використовується в основному для налагодження бітових операцій, цифри можуть бути `0` або `1`.
112+
- **base=36** є максимальною, цифри можуть бути `0..9` або `A..Z`. Для позначення такого числа в якості цифер використовується увесь латинський алфавіт. Кумедно, але переведення числа в таку систему числення буває корисним коли ми маємо дуже довгий числовий ідентифікатор і хочемо перетворити його на щось коротше, бо хочемо зробити URL коротшим. Для цього достатньо представити його в системі числення з базою `36`:
113113

114114
```js run
115-
alert( 123456..toString(36) ); // 2n9c
115+
alert( 123456..toString(36) ); // "2n9c"
116116
```
117117

118118
```warn header="Дві крапки для виклику методу"
@@ -181,7 +181,7 @@ alert( num.toString(2) ); // 11111111
181181
alert( num.toFixed(1) ); // "12.4"
182182
```
183183

184-
Зверніть увагу, що результат `toFixed` -- це рядок. Якщо десяткова частина коротша, ніж потрібно, нулі додаються в кінці:
184+
Зверніть увагу, що результат `toFixed` -- це рядок. І в кінці можуть додаватись нулі якщо десяткова частина коротша, ніж потрібно:
185185

186186
```js run
187187
let num = 12.34;
@@ -192,7 +192,7 @@ alert( num.toString(2) ); // 11111111
192192

193193
## Неточні розрахунки
194194

195-
Із середини, число представлено у 64-бітному форматі [IEEE-754](https://en.wikipedia.org/wiki/IEEE_754), тому для його зберігання треба саме 64 біти: 52 з них використовуються для зберігання цифр, 11 -- відповідають за позицію десяткової крапки (для цілих чисел вони дорівнюють нулю), а 1 біт -- для знака.
195+
Із середини, число представлено у 64-бітному форматі [IEEE-754](https://en.wikipedia.org/wiki/IEEE_754), тому для його зберігання треба саме 64 біти: 52 з них використовуються для зберігання цифр, 11 -- відповідають за позицію десяткової крапки (для цілих чисел вони дорівнюють нулю), а 1 біт -- для полярності (тобто інформації чи йде перед числом знак мінус, чи ні).
196196

197197
Якщо число занадто велике, та переповнює 64-біти, воно буде перетворене на спеціальне числове значення `Infinity`(Нескінченність):
198198

@@ -220,7 +220,7 @@ alert( 0.1 + 0.2 ); // 0.30000000000000004
220220

221221
Але чому так відбувається?
222222

223-
Число зберігається в пам’яті у його двійковій формі, послідовність бітів - одиниць і нулів. Але дроби на кшталт `0.1`, `0.2`, які виглядають просто в десятковій системі числення, насправді є нескінченними дробами у своїй двійковій формі.
223+
Число зберігається в пам’яті у його двійковій формі, як послідовність бітів - одиниць і нулів. Але дроби на кшталт `0.1`, `0.2`, які виглядають просто в десятковій системі числення, насправді є нескінченними дробами у своїй двійковій формі.
224224

225225
Іншими словами, що таке `0.1`? Це одиниця розділена на десять `1/10` -- одна десята. У десятковій системі такі числа досить легко представити, але якщо порівняти його з однією третиною: `1/3`, то ми стикаємось з нескінченним дробом `0.33333(3)`.
226226

@@ -252,7 +252,7 @@ let sum = 0.1 + 0.2;
252252
alert( sum.toFixed(2) ); // "0.30"
253253
```
254254

255-
Зауважте, що `toFixed` завжди повертає рядок, щоб число гарантовано мало дві цифри після десяткової крапки. Це насправді зручно, якщо у нас є електронні покупки та нам потрібно показати `$0.30`. В інших випадках ми можемо використовувати одинарний плюс, щоб для приведення його до числа:
255+
Зауважте, що `toFixed` завжди повертає рядок, щоб число гарантовано мало дві цифри після десяткової крапки. Та й взагалі це зручно, якщо у нас є електронні покупки та нам потрібно показати `$0.30`. В інших випадках ми можемо використовувати одинарний плюс, якщо хочемо результат `toFixed` конвертувати в число:
256256

257257
```js run
258258
let sum = 0.1 + 0.2;
@@ -268,7 +268,7 @@ alert( (0.28 * 100 + 0.14 * 100) / 100); // 0.4200000000000001
268268

269269
Отже, підхід множення/ділення зменшує помилку, але не видаляє її повністю.
270270

271-
Іноді можна спробувати уникнути проблем з дробами. Якщо ми маємо справу з магазином, то можемо зберігати ціни в центах замість доларів. Але що робити, якщо ми застосуємо знижку в розмірі 30%? На практиці повністю уникнути дробів вдається досить рідко. Просто округліть їх, щоб вирізати "хвости", коли це потрібно.
271+
Іноді можна спробувати уникнути проблем з дробами. Якщо ми маємо справу з магазином, то можемо зберігати ціни в центах замість доларів. Але що робити, якщо ми застосуємо знижку в розмірі 30%? На практиці повністю уникнути дробів вдається досить рідко. Тому просто округляйте їх, щоб відрізати "хвости", коли це потрібно.
272272

273273
````smart header="Цікавий факт"
274274
Спробуйте запустити:
@@ -286,7 +286,7 @@ JavaScript не викликає помилку в таких випадках.
286286
```smart header="Два нулі"
287287
Ще одним кумедним наслідком внутрішньої реалізації чисел є наявність двох нулів: `0` і `-0`.
288288
289-
Це тому, що знак представлений одним бітом, тому його можна встановити або не встановити для будь-якого числа, включаючи нуль.
289+
Це тому, що в усіх чисел є один біт для знака. А тому знак можна встановити або не встановити для будь-якого числа, навіть для нуля.
290290
291291
У більшості випадків відмінність непомітна, оскільки оператори підходять до них як до однакових.
292292
```
@@ -308,13 +308,13 @@ JavaScript не викликає помилку в таких випадках.
308308
alert( isNaN("str") ); // true
309309
```
310310

311-
Але чи потрібна нам ця функція? Чи не можемо ми просто використати порівняння `=== NaN`? Вибачте, але відповідь -- ні. Значення `NaN` унікальне тим, що воно нічому не дорівнює, включаючи себе:
311+
Але чи потрібна нам ця функція? Чи не можемо ми просто використати порівняння `=== NaN`? Вибачте, але відповідь -- ні. Значення `NaN` унікальне тим, що воно нічому не дорівнює, навіть самому собі:
312312

313313
```js run
314314
alert( NaN === NaN ); // false
315315
```
316316

317-
- `isFinite(value)` перетворює свій аргумент в число і повертає `true`, якщо це звичайне число, та `false`, якщо `NaN/Infinity/-Infinity`:
317+
- `isFinite(value)` перетворює свій аргумент в число і повертає `true`, якщо це звичайне число. Або `false`, якщо `NaN/Infinity/-Infinity`:
318318

319319
```js run
320320
alert( isFinite("15") ); // true
@@ -328,7 +328,7 @@ JavaScript не викликає помилку в таких випадках.
328328
```js run
329329
let num = +prompt("Enter a number", '');
330330
331-
// буде істинним, якщо ви не введете Infinity, -Infinity чи не число
331+
// буде true, якщо ви не введете Infinity, -Infinity чи NaN
332332
alert( isFinite(num) );
333333
```
334334

@@ -364,12 +364,12 @@ alert( isFinite(num) );
364364
````
365365

366366
```smart header="Порівняння з `Object.is`"
367-
Існує спеціальний вбудований метод `Object.is`, який порівнює значення як `===`, але є більш надійним для двох виключень:
367+
Існує спеціальний вбудований метод `Object.is`, який порівнює значення як `===`, але є більш надійним для двох виняткових випадків:
368368
369369
1. Працює з `NaN`: `Object.is(NaN, NaN) === true`, і це добре.
370370
2. Значення `0` і` -0` різні: `Object.is(0, -0) === false`, технічно це правда, оскільки внутрішньо число має біт знаків, який може бути різним, навіть якщо всі інші біти -- нулі.
371371
372-
У всіх інших випадках `Object.is(a, b)` те саме, що `a === b`.
372+
У всіх інших випадках `Object.is(a, b)` поверне те саме, що й `a === b`.
373373
374374
Ми згадуємо тут `Object.is`, оскільки він часто використовується в специфікації JavaScript. Коли для внутрішнього алгоритму потрібно порівняти два значення, щоб вони були абсолютно однаковими, він використовує `Object.is` (ще його називають [SameValue](https://tc39.github.io/ecma262/#sec-samevalue)).
375375
```
@@ -389,7 +389,7 @@ alert( +"100px" ); // NaN
389389

390390
Ось для чого призначені `parseInt` та `parseFloat`.
391391

392-
Вони "читають" число з рядка, до поки можуть, у разі помилки зчитане число повертається. Функція `parseInt` повертає ціле число, тоді як `parseFloat` повертає число з плаваючою крапкою:
392+
Вони допоки можуть -- доти "читають" число з рядка. І у разі помилки зчитане число повертається. Функція `parseInt` повертає ціле число, тоді як `parseFloat` повертає число з плаваючою крапкою:
393393

394394
```js run
395395
alert( parseInt('100px') ); // 100
@@ -450,9 +450,9 @@ JavaScript має вбудований [Math](https://developer.mozilla.org/uk/d
450450

451451
## Підсумки
452452

453-
Щоб записати числа з багатьма нулями:
453+
Для написання числа з багатьма нулями:
454454

455-
- Додайте `"e"` з числом нулів до числа. Як і: `123e6` те саме, що `123` з 6 нулями `123000000`.
455+
- Додайте `"e"` з кількістю нулів до числа. Наприклад `123e6` -- це те саме, що `123` з 6 нулями `123000000`.
456456
- Від’ємне число після `"е"` призводить до ділення числа на 1 із заданими нулями. Наприклад `123e-6` означає `0.000123` (`123` мільйони).
457457

458458
Для різних систем числення:
@@ -463,10 +463,10 @@ JavaScript має вбудований [Math](https://developer.mozilla.org/uk/d
463463

464464
Для регулярних тестів чисел:
465465

466-
- `isNaN(value)` перетворює свій аргумент на число, а потім перевіряє його на `NaN`
467-
- `Number.isNaN(value)` перевіряє, чи належить його аргумент до типу `number`, і якщо так, перевіряє його на `NaN`
468-
- `isFinite(value)` перетворює свій аргумент на число, а потім перевіряє, чи не є `NaN/Infinity/-Infinity`
469-
- `Number.isFinite(value)` перевіряє, чи належить його аргумент до типу `number`, і якщо так, перевіряє, чи не є `NaN/Infinity/-Infinity`
466+
- `isNaN(value)` перетворює свій аргумент на число, а потім перевіряє чи він `NaN`
467+
- `Number.isNaN(value)` перевіряє, чи належить його аргумент до типу `number`, і якщо так, перевіряє чи він `NaN`
468+
- `isFinite(value)` перетворює свій аргумент на число, а потім перевіряє, чи не є він `NaN/Infinity/-Infinity`
469+
- `Number.isFinite(value)` перевіряє, чи належить його аргумент до типу `number`, і якщо так, перевіряє, чи не є він `NaN/Infinity/-Infinity`
470470

471471
Для перетворення значень на зразок `12pt` та `100px` у число:
472472

0 commit comments

Comments
 (0)