Math.fround()
Статичний метод Math.fround()
повертає найближчий відповідник числу в форматі 32-бітного числа з рухомою комою одинарної точності.
Спробуйте його в дії
Синтаксис
Math.fround(doubleFloat)
Параметри
doubleFloat
Число.
Повернене значення
Найближчий відповідник x
, у форматі 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
Специфікації
Сумісність із браузерами
desktop | mobile | server | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
fround
|
Chrome Full support 38 | Edge Full support 12 | Firefox Full support 26 | Internet Explorer No support Ні | Opera Full support 25 | Safari Full support 8 | WebView Android Full support 38 | Chrome Android Full support 38 | Firefox for Android Full support 26 | Opera Android Full support 25 | Safari on iOS Full support 8 | Samsung Internet Full support 3.0 | Deno Full support 1.0 | Node.js Full support 0.12.0 |