Функція Math.fround() повертає найближче зображення числового аргументу у вигляді 32-бітного числа з рухомою комою одинарної точності.

Синтаксис

var singleFloat = Math.fround(doubleFloat);

Аргументи

doubleFloat
Number. Якщо аргумент має інший тип - його буде приведено до числа, або ж до NaN у випадку, якщо таке приведення неможливе.

Результат

Зображеня аргументу у вигляді найближчого 32-бітного числа з рухомою комою одинарної точності.

Опис

JavaScript всередині використовує 64-бітні числа із рухомою комою подвійної точності. Це забезпечує дуже високу точність обчислень. Однак, інколи у вас може виникнути потреба працювати із 32-бітними числами того ж типу. Зокрема, якщо ви читаєте дані із Float32Array. Це може викликати певну плутанину: перевірка рівності 64-бітного та 32-бітного чисел може дати негативний результат, навіть якщо числа здаються однаковими.

Щоб вирішити цю проблему, можна застосувати Math.fround() для перетворення 64-бітного числа у 32-бітне. JavaScript всередині продовжить вважати числа за 64-бітні, натомість виконуючи "округлення до найближчого парного" на 23-му біті мантиси, і встановлююючи наступний за нею біт в 0. Якщо число виходить за межі 32-бітного із рухомою комою, то в результаті буде отримана Infinity чи -Infinity.

Оскільки fround()є статичним методом Math, він завжди використовується як Math.fround(), а не метод створеного Вами об'єкту Math (Math не є конструктором).

Приклади

Застосування Math.fround()

Число 1.5 може бути точно відтворено у двійковій системі числення, причому 32-бітний і 64-бітний результати будуть однакові:

Math.fround(1.5); // 1.5
Math.fround(1.5) === 1.5; // true

Однак, число 1.337 не може бути точно зображено у двійковій системі числення, тож  32-бітне і 64-бітне зображення цього числа будуть відрізнятись:

Math.fround(1.337); // 1.3370000123977661
Math.fround(1.337) === 1.337; // false

21502^150 - занадто велике для 32-бітного числа із рухомою комою, тому результатом буде Infinity:

2 ** 150; // 1.42724769270596e+45
Math.fround(2 ** 150); // Infinity

Якщо аргумент не може бути приведеним до числа, чи просто являється not-a-number (NaN), Math.fround() поверне NaN:

Math.fround('abc'); // NaN
Math.fround(NaN); // NaN

Поліфіл

Даний функціонал можна відтворити за допомогою наступної функції (за умови наявної підтримки Float32Array):

Math.fround = Math.fround || (function (array) {
  return function(x) {
    return array[0] = x, array[0];
  };
})(new Float32Array(1));

Специфікації

Специфікація Статус документу Примітка
ECMAScript 2015 (6th Edition, ECMA-262)
The definition of 'Math.fround' in that specification.
Standard Первинне визначення.
ECMAScript Latest Draft (ECMA-262)
The definition of 'Math.fround' in that specification.
Draft  

Підтримка у браузерах

FeatureChromeEdgeFirefoxInternet ExplorerOperaSafari
Basic support38 Yes26 No258
FeatureAndroid webviewChrome for AndroidEdge mobileFirefox for AndroidOpera AndroidiOS SafariSamsung Internet
Basic support Yes Yes Yes26 Yes8 Yes

Дивіться також

Мітки документа й учасники

Зробили внесок у цю сторінку: AdriandeCita
Востаннє оновлена: AdriandeCita,