Math.fround() приводит число к точности 32-битного числа с плавающей точкой.
Это не обычное округление до целого. Метод нужен для случаев, когда важно получить поведение, близкое к float32.
Синтаксис
Math.fround(x)
x - число, которое нужно привести к 32-битной точности.
Что делает Math.fround()
Метод берёт обычное число JavaScript и возвращает его версию с точностью float32.
console.log(Math.fround(1.5)); // 1.5
console.log(Math.fround(1.337)); // 1.3370000123977661
Иногда значение остаётся тем же, а иногда становится чуть другим.
Это происходит потому, что float32 хранит число менее точно, чем обычный number в JavaScript.
Что возвращает Math.fround()
Math.fround() возвращает число типа number.
const result = Math.fround(1.337);
console.log(result); // 1.3370000123977661
console.log(typeof result); // "number"
То есть результат всё равно остаётся типом number, просто значение уже приведено к 32-битной точности.
Это не Math.round()
Очень важно не путать Math.fround() с обычным округлением.
console.log(Math.round(1.337)); // 1
console.log(Math.fround(1.337)); // 1.3370000123977661
Math.round()округляет до целогоMath.fround()меняет точность представления числа
Это вообще разные задачи.
Почему число меняется
Не каждое десятичное число можно точно представить в формате float32.
Поэтому после Math.fround() значение иногда выглядит странно:
console.log(Math.fround(1.337)); // 1.3370000123977661
Это нормальное поведение метода, а не ошибка.
Когда результат не меняется
Некоторые числа хорошо представимы и остаются теми же.
console.log(Math.fround(1.5)); // 1.5
console.log(Math.fround(2)); // 2
Очень большие и очень маленькие числа
Из-за ограничения float32 очень большие значения могут превратиться в Infinity, а очень маленькие - в 0.
console.log(Math.fround(1e100)); // Infinity
console.log(Math.fround(1e-50)); // 0
Это хороший пример того, что Math.fround() именно снижает точность и диапазон представления.
Неявное приведение типов
Как и многие методы Math, Math.fround() сначала пытается привести аргумент к числу.
console.log(Math.fround("1.5")); // 1.5
console.log(Math.fround(null)); // 0
console.log(Math.fround(true)); // 1
На практике обычно лучше передавать уже готовое число.
NaN и Infinity
Для специальных значений метод ведёт себя предсказуемо.
console.log(Math.fround(NaN)); // NaN
console.log(Math.fround(Infinity)); // Infinity
console.log(Math.fround(-Infinity)); // -Infinity
Math.fround() и обычный number
В JavaScript все обычные числа имеют формат number, который точнее, чем float32.
Именно поэтому результат Math.fround() может не совпадать с исходным значением:
console.log(Math.fround(1.337) === 1.337); // false
Когда это полезно
Math.fround() удобно использовать, когда:
- нужно привести число к точности
float32 - важно повторить поведение WebGL, TypedArray или другой среды с 32-битными float
- вы хотите явно увидеть, как число будет храниться в
Float32Array
Пример:
const value = 1.337;
console.log(Math.fround(value));
Math.fround() и Float32Array
По смыслу Math.fround() близок к записи числа в Float32Array.
const value = 1.337;
console.log(Math.fround(value)); // 1.3370000123977661
То есть метод полезен, когда нужно заранее понять, как число переживёт потерю точности.
Частые ошибки
Думать, что это обычное округление
console.log(Math.fround(1.337)); // 1.3370000123977661
Метод не округляет до целого и не форматирует число “красивее”. Он просто приводит его к точности float32.
Удивляться, что число стало чуть другим
console.log(Math.fround(1.337) === 1.337); // false
Это и есть основная суть метода.
Использовать Math.fround() без реальной необходимости
Для обычного прикладного кода этот метод нужен редко.
Чаще всего его используют там, где действительно важна 32-битная точность.
Быстрая памятка
Math.fround()приводит число к точностиfloat32- метод возвращает
number - это не округление до целого
- результат может немного отличаться от исходного числа
- очень большие числа могут стать
Infinity - очень маленькие числа могут стать
0
Коротко
Math.fround() - это способ явно привести число к 32-битной точности в JavaScript. Главное, что стоит запомнить: метод не округляет до целого, а снижает точность представления числа, поэтому результат иногда выглядит чуть иначе, чем исходное значение.