Числа в JavaScript

Основний числовий тип JavaScript, Number, служить для подання цілих чисел та апроксимації дійсних чисел. Він дозволяє точно подавати всі цілі числа між -9 007 199 254 740 922 та 9 007 199 254 740 992.

Коли число знаходиться прямо у програмі JS воно зветься літералом. Будь-якому числовому літералу може передувати знак мінус, щоб робити число від’ємним.

Дійсні числа

В JS ціле десятичне число записується як послідовність цифр (0, 3, 125, 929979929). Крім цього, JS розпізнає шістнадцяткові значення. Починаючи з ES6 цілі числа можна виражати в двійковому або вісімковому вигляді.

Числові літерали з рухомою крапкою

Числові літерали з рухомою крапкою можуть мати десятичну крапку. В цьому випадку використовується традиційний синтаксис для дійсних чисел – дійсне число видається як ціла частина за якою слідує десятична крапка і дробна частина числа.

1.023 або 7.5 тощо.

Також числові літерали з рухомою крапкою можуть бути представлені у експоненціальному запису. В такому випадку спочатку записується дійсне число, за ним слідує велика або мала літера E, необов’язковий знак плюс або мінус і в кінці цілий показник степені (експонента).

[  цифри] [ . цифри ] [ ( e | E ) [ ( + | - ) ] цифри ]
6.02e23 // 6.02 x 1023

У довгих числових літералах дозволяється використовувати підкреслення щоб розбивати їх на порції для кращого сприйняття:

let billion = 1_000_000_000

Арифметичні дії у JavaScript

Для роботи з числами програми на JS використовують арифметичні операції, що їх надає мова. Це:

  • + для додавання;
  • – для віднімання;
  • * для множення;
  • / для ділення;
  • % для ділення по модулю (отримання залишку від ділення);
  • ** для зведення у ступінь.

Крім цього, для більш складних арифметичних операцій Javascript має набір фцнкцій та констант визначенних як властивості об’єкта Math.

Арифметичні дії не генерують помилок у разі переповнення, втрати значущості чи ділення на нуль.

У разі переповнення (результат операції перевищує найбільше можливе число) результатом буде значення безкінечності – Infinity. Якщо це буде від’ємне чисто, то і безкінечність буде від’ємною  – -Infinity. Арифметичні операції з безкінечностями на будь що дають в результаті безкінечність (або відє’мну безкінечність).

Втрата значущості відбувається у випадку, коли результат числової операції знаходиться ближче до нуля, ніж найменше представне число. В цьому випадку JS повертає 0. Якщо втрата значущості відбувається з від’ємним числом JS повертає від’ємний нуль.

Ділення на нуль, з одним виключенням, не рахується за помилку у JS. У результаті такої операції повертається звичайна або від’ємна безкінечність. Виключення – нуль ділений на нуль. Результатом такої операції буде значення не число (not-a-number), NaN.

NaN також виникає при спробі ділення безкінечності на безкінечність, взяття квадратного кореня з від’ємного числа чи використання арифметичних операцій з нечисловими операндами, котрі не можуть бути перетворенні на числа.

Для зберігання безкінечностей та NaN в JS предвизначені глобальні константи Infinity та NaN, значення котрих доступні у вигляді властивостей об’єкта Number.

Значення NaN у JavaScript не дорівнює жодному іншому значенню, включаючи самого себе. Як результат, щоб дізнатися, чи має змінна x хначення NaN вираз x === NaN не спрацює. Замість ньго необхідно писати x != x абоNumber.isNaN(x).

Значення від’ємного нуля дорівнює звичайному нулю крім ситуації коли вони використовуються в якості ділителя.

let zero = 0;   // Звичайний нуль
let negz = -0;  // Від’ємний нуль
zero === negz.  // => true: нуль і від’ємний нуль однакові
1/zero === 1/negz.  // => false: Infinity и -Infinity не дорівнюють

Двійкове подання чисел з рухомою крапкою та помилки округлення

За допомогою формату рухомої крапки JavaScript може бути подана кінечна кількість дійсних чисел (18 437 736 874 454 810 627). Це означає що під час роботи з дійсними числами в JS подання числа часто буде апроксимацією фактичного числа. Подання рухомої крапки стандартом IEEE-754 є двійковим і може точно подавати дроби на кшталт 1/2, 1/8, 1/1024. Однак частіше в роботі використовуються дроби 1/10, 1/100. Двійкове подання не здатне точно подавати такі числа.

let х = .3 - .2;
let у = .2 - .1;
х === у  // => false: два значення не однакові
х === .1.  // => false: .3 - .2 не дорівнює .1
У === .1.  // => true: .2 - .1 дорівнює .1

Цілі числа довільної точності з використанням BigInt

BigInt – числовий тип з цілими значеннями. Доданий в JavaScript головним чином для подавання 64 бітних чисел, необхідних для сумісності з іншими мовами програмування та API-інтерфейсами.

BigInt літерали записуються як рядок цифр за якими слідує літера n у нижньому регістрі. За умовчуванням вони є дисятичними, але для двійкових, вісімкових та шістналцяткових можна використовувати відповідні префікси: 0b, 0o та 0x.

Для перетворення звичайних чисел або рядків JS у зачення BigInt можна використовувати функцію BigInt().

Арифметичні дії із значеннями BigInt працюють аналогічним діям зі зівичайними числами за виключенням того, що ділення відкидає будь-який залишок та округлює його у меньший бік.

В арифметичних діях не дозволено змішувати операнди різних числових типів. Натомість операції порівняння працюють зі змішаними числовими типами. Жодна з функцій об’єкту Math не приймає операнди BigInt.

Дата та час

В JavaScript визначений простий клас Date для подавання та маніпулювання числами дати та часу. Екземпляри цього класу є об’єктами, але також мають числове подання у вигляді відміток часу, вказуючих кількість мілісекунд, пройшовших від 1 січня 1970 року.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *