You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: 1-js/05-data-types/02-number/article.md
+26-26Lines changed: 26 additions & 26 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -31,7 +31,7 @@ let billion = 1_000_000_000;
31
31
```js run
32
32
let billion =1e9; // 1 мільярд, буквально: 1 та 9 нулів
33
33
34
-
alert( 7.3e9 ); // 7.3 мільярдів (таке ж саме що 7300000000 чи 7_300_000_000)
34
+
alert( 7.3e9 ); // 7.3 мільярдів (те ж саме, що й 7300000000 чи 7_300_000_000)
35
35
```
36
36
37
37
Іншими словами, `"e"` помножує число на `1` із заданим числом нулів.
@@ -89,30 +89,30 @@ let b = 0o377; // вісімкова форма 255
89
89
alert( a == b ); // true, те саме число 255 з обох сторін
90
90
```
91
91
92
-
Є лише 3 системи числення з такою підтримкою. Для інших систем числення ми повинні використовувати функцію `parseInt` (яку ми побачимо далі в цьому розділі).
92
+
Таким способом підтримуються лише 3 системи числення. Для інших систем числення ми повинні використовувати функцію `parseInt` (яку ми побачимо далі в цьому розділі).
93
93
94
94
## toString(base)
95
95
96
-
Метод `num.toString(base)` повертає рядкове представлення `num` в системі числення із заданим `base`.
96
+
Метод `num.toString(base)` повертає `num` у вигляді рядка, в якому вказане це ж число, але в системі числення із заданим `base`.
97
97
98
98
Наприклад:
99
99
```js run
100
100
let num =255;
101
101
102
-
alert( num.toString(16) ); //ff
103
-
alert( num.toString(2) ); // 11111111
102
+
alert( num.toString(16) ); //"ff"
103
+
alert( num.toString(2) ); //"11111111"
104
104
```
105
105
106
106
`base` може бути від `2` до `36`. За замовчуванням це `10`.
107
107
108
108
Загальні випадки використання для цього є:
109
109
110
110
-**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`:
Із середини, число представлено у 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 біт -- для полярності (тобто інформації чи йде перед числом знак мінус, чи ні).
196
196
197
197
Якщо число занадто велике, та переповнює 64-біти, воно буде перетворене на спеціальне числове значення `Infinity`(Нескінченність):
Число зберігається в пам’яті у його двійковій формі, послідовність бітів - одиниць і нулів. Але дроби на кшталт `0.1`, `0.2`, які виглядають просто в десятковій системі числення, насправді є нескінченними дробами у своїй двійковій формі.
223
+
Число зберігається в пам’яті у його двійковій формі, як послідовність бітів - одиниць і нулів. Але дроби на кшталт `0.1`, `0.2`, які виглядають просто в десятковій системі числення, насправді є нескінченними дробами у своїй двійковій формі.
224
224
225
225
Іншими словами, що таке `0.1`? Це одиниця розділена на десять `1/10`-- одна десята. У десятковій системі такі числа досить легко представити, але якщо порівняти його з однією третиною:`1/3`, то ми стикаємось з нескінченним дробом `0.33333(3)`.
226
226
@@ -252,7 +252,7 @@ let sum = 0.1 + 0.2;
252
252
alert( sum.toFixed(2) ); // "0.30"
253
253
```
254
254
255
-
Зауважте, що `toFixed` завжди повертає рядок, щоб число гарантовано мало дві цифри після десяткової крапки. Це насправді зручно, якщо у нас є електронні покупки та нам потрібно показати `0ドル.30`. В інших випадках ми можемо використовувати одинарний плюс, щоб для приведення його до числа:
255
+
Зауважте, що `toFixed` завжди повертає рядок, щоб число гарантовано мало дві цифри після десяткової крапки. Та й взагалі це зручно, якщо у нас є електронні покупки та нам потрібно показати `0ドル.30`. В інших випадках ми можемо використовувати одинарний плюс, якщо хочемо результат `toFixed` конвертувати в число:
Отже, підхід множення/ділення зменшує помилку, але не видаляє її повністю.
270
270
271
-
Іноді можна спробувати уникнути проблем з дробами. Якщо ми маємо справу з магазином, то можемо зберігати ціни в центах замість доларів. Але що робити, якщо ми застосуємо знижку в розмірі 30%? На практиці повністю уникнути дробів вдається досить рідко. Просто округліть їх, щоб вирізати"хвости", коли це потрібно.
271
+
Іноді можна спробувати уникнути проблем з дробами. Якщо ми маємо справу з магазином, то можемо зберігати ціни в центах замість доларів. Але що робити, якщо ми застосуємо знижку в розмірі 30%? На практиці повністю уникнути дробів вдається досить рідко. Тому просто округляйте їх, щоб відрізати"хвости", коли це потрібно.
272
272
273
273
````smart header="Цікавий факт"
274
274
Спробуйте запустити:
@@ -286,7 +286,7 @@ JavaScript не викликає помилку в таких випадках.
286
286
```smart header="Два нулі"
287
287
Ще одним кумедним наслідком внутрішньої реалізації чисел є наявність двох нулів: `0` і `-0`.
288
288
289
-
Це тому, що знак представлений одним бітом, тому його можна встановити або не встановити для будь-якого числа, включаючи нуль.
289
+
Це тому, що в усіх чисел є один біт для знака. А тому знак можна встановити або не встановити для будь-якого числа, навіть для нуля.
290
290
291
291
У більшості випадків відмінність непомітна, оскільки оператори підходять до них як до однакових.
292
292
```
@@ -308,13 +308,13 @@ JavaScript не викликає помилку в таких випадках.
308
308
alert( isNaN("str") ); // true
309
309
```
310
310
311
-
Але чи потрібна нам ця функція? Чи не можемо ми просто використати порівняння `=== NaN`? Вибачте, але відповідь -- ні. Значення `NaN` унікальне тим, що воно нічому не дорівнює, включаючи себе:
311
+
Але чи потрібна нам ця функція? Чи не можемо ми просто використати порівняння `=== NaN`? Вибачте, але відповідь -- ні. Значення `NaN` унікальне тим, що воно нічому не дорівнює, навіть самому собі:
312
312
313
313
```js run
314
314
alert( NaN === NaN ); // false
315
315
```
316
316
317
-
-`isFinite(value)` перетворює свій аргумент в число і повертає `true`, якщо це звичайне число, та`false`, якщо `NaN/Infinity/-Infinity`:
317
+
-`isFinite(value)` перетворює свій аргумент в число і повертає `true`, якщо це звичайне число. Або`false`, якщо `NaN/Infinity/-Infinity`:
318
318
319
319
```js run
320
320
alert( isFinite("15") ); // true
@@ -328,7 +328,7 @@ JavaScript не викликає помилку в таких випадках.
328
328
```js run
329
329
let num = +prompt("Enter a number", '');
330
330
331
-
// буде істинним, якщо ви не введете Infinity, -Infinity чи не число
331
+
// буде true, якщо ви не введете Infinity, -Infinity чи NaN
332
332
alert( isFinite(num) );
333
333
```
334
334
@@ -364,12 +364,12 @@ alert( isFinite(num) );
364
364
````
365
365
366
366
```smart header="Порівняння з `Object.is`"
367
-
Існує спеціальний вбудований метод `Object.is`, який порівнює значення як `===`, але є більш надійним для двох виключень:
367
+
Існує спеціальний вбудований метод `Object.is`, який порівнює значення як `===`, але є більш надійним для двох виняткових випадків:
368
368
369
369
1. Працює з `NaN`: `Object.is(NaN, NaN) ===true`, і це добре.
370
370
2. Значення `0` і`-0` різні: `Object.is(0, -0) ===false`, технічно це правда, оскільки внутрішньо число має біт знаків, який може бути різним, навіть якщо всі інші біти -- нулі.
371
371
372
-
У всіх інших випадках `Object.is(a, b)` те саме, що `a === b`.
372
+
У всіх інших випадках `Object.is(a, b)`поверне те саме, що й`a === b`.
373
373
374
374
Ми згадуємо тут `Object.is`, оскільки він часто використовується в специфікації JavaScript. Коли для внутрішнього алгоритму потрібно порівняти два значення, щоб вони були абсолютно однаковими, він використовує `Object.is` (ще його називають [SameValue](https://tc39.github.io/ecma262/#sec-samevalue)).
375
375
```
@@ -389,7 +389,7 @@ alert( +"100px" ); // NaN
389
389
390
390
Ось для чого призначені `parseInt` та `parseFloat`.
391
391
392
-
Вони "читають" число з рядка, до поки можуть, у разі помилки зчитане число повертається. Функція `parseInt` повертає ціле число, тоді як `parseFloat` повертає число з плаваючою крапкою:
392
+
Вони допоки можуть -- доти "читають" число з рядка. І у разі помилки зчитане число повертається. Функція `parseInt` повертає ціле число, тоді як `parseFloat` повертає число з плаваючою крапкою:
393
393
394
394
```js run
395
395
alert( parseInt('100px') ); // 100
@@ -450,9 +450,9 @@ JavaScript має вбудований [Math](https://developer.mozilla.org/uk/d
450
450
451
451
## Підсумки
452
452
453
-
Щоб записати числа з багатьма нулями:
453
+
Для написання числа з багатьма нулями:
454
454
455
-
- Додайте `"e"` з числом нулів до числа. Як і:`123e6` те саме, що `123` з 6 нулями `123000000`.
455
+
- Додайте `"e"` з кількістю нулів до числа. Наприклад `123e6`-- це те саме, що `123` з 6 нулями `123000000`.
456
456
- Від’ємне число після `"е"` призводить до ділення числа на 1 із заданими нулями. Наприклад `123e-6` означає `0.000123` (`123` мільйони).
457
457
458
458
Для різних систем числення:
@@ -463,10 +463,10 @@ JavaScript має вбудований [Math](https://developer.mozilla.org/uk/d
463
463
464
464
Для регулярних тестів чисел:
465
465
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`
470
470
471
471
Для перетворення значень на зразок `12pt` та `100px` у число:
0 commit comments