Функція Math.fround()
повертає найближче зображення числового аргументу у вигляді 32-бітного числа з рухомою комою одинарної точності.
Джерело цих інтерактивних прикладів зберігається у репозиторії на GitHub. Якщо ви маєте бажання зробити свій внесок у проект інтерактивних прикладів - будь ласка, зклонуйте репозиторій https://github.com/mdn/interactive-examples та пришліть нам pull request.
Синтаксис
var singleFloat = Math.fround(doubleFloat);
Аргументи
Результат
Зображеня аргументу у вигляді найближчого 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
- занадто велике для 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 (ECMA-262) The definition of 'Math.fround' in that specification. |
Living Standard |
Підтримка у браузерах
BCD tables only load in the browser
Таблиця сумісності на цій сторінці сформована автоматично із структурованих даних. Якщо ви маєте бажання зробити свій внесок до цих даних - будь-ласка, ось репозиторій https://github.com/mdn/browser-compat-data, надішліть нам свій pull request.