Математические функции в JavaScript
Теория
Методы и функции: Math.abs, Math.round, Math.ceil, Math.floor, Math.min, Math.max, Math.sqrt, Math.pow, Math.random, isNaN, isFinite, parseInt, parseFloat, toFixed.
Функция Math.abs
Функция Math.abs возвращает модуль числа, т.е. из отрицательного числа делает положительное.
Синтаксис: Math.abs(число).
Пример
Будет выведен модуль числа -3:
document.write(Math.abs(-3))
Пример
Будет выведен модуль числа 3:
document.write(Math.abs(3))
Функция Math.round
Функция Math.round выполняет округление до ближайшего целого числа по правилам математического округления.
Синтаксис: Math.round(число).
Пример
Округлить до целых число 6.4:
document.write(Math.round(6.4))
Пример
Округлить до целых число 6.6:
document.write(Math.round(6.6))
Пример
Округлить до целых число 6.5:
document.write(Math.round(6.5))
Пример
Округлить до целых число 6.49999:
Функция Math.ceil
Функция Math.ceil производит округление числа до целых всегда в большую сторону.
Синтаксис: Math.ceil(число).
Пример
Округлить число 3.00001 в большую сторону:
document.write(Math.ceil(3.00001))
Функция Math.floor
Функция Math.floor производит округление числа до целых всегда в меньшую сторону.
Синтаксис: Math.floor(число).
Пример
Округлить число 2.9999 в меньшую сторону:
document.write(Math.floor(2.9999))
Функция Math.min
Функция Math.min возвращает минимальное число из группы чисел, переданных в функцию.
Если в функцию ничего не передано, то будет возращено Infinity.
По умолчанию функция не работает с массивами, однако с помощью хитрого приема можно найти минимальное значение массива: Math.min.apply(null,a), где a - произвольный массив.
Синтаксис: Math.min(число,число,число,…).
Пример
Будет выведено минимальное число из группы чисел 40,8,42,88,67:
document.write(Math.min(40,8,42,88,67))
Пример
Будет выведено минимальное число из группы чисел -1,-88,-8,-25,40:
document.write(Math.min(-1,-88,-8,-25,40))
Пример
Будет выведено Infinity, т.к. функции не передали параметров:
document.write(Math.min())
Пример
Будет выведено минимальное значение массива:
var a=[40,8,42,88,67];document.write(Math.min.apply(null,a))
Функция Math.max
Функция Math.max возвращает максимальное число из группы чисел, переданных в функцию.
Если в функцию ничего не передано, то будет возращено -Infinity.
По умолчанию функция не работает с массивами, однако с помощью приема можно найти максимальное значение массива: Math.max.apply(null,a), где a - произвольный массив.
Синтаксис: Math.max(число,число,число,…).
Пример
Будет выведено максимальное число из группы чисел 1,5,8,34,88:
document.write(Math.max(1,5,8,34,88))
Пример
Будет выведено максимальное число из группы чисел -1,0,-8,-56,-88:
document.write(Math.max(-1,0,-8,-56,-88))
Пример
Будет выведено -Infinity, т.к. функции не передали параметров:
document.write(Math.max())
Пример
Будет выведено максимальное значение массива:
var a=[1,5,8,34,88];document.write(Math.max.apply(null,a))
Функция Math.sqrt
Функция Math.sqrt возвращает квадратный корень числа.
Синтаксис: Math.sqrt(положительное число).
Пример
Будет выведен квадратный корень из 4:
document.write(Math.sqrt(4))
Пример
Будет выведен квадратный корень из 8:
document.write(Math.sqrt(8))
Пример
Будет выведен квадратный корень из -8. Так как передано отрицательное число, то будет выведено NaN:
document.write(Math.sqrt(-8))
Функция Math.pow
Функция Math.pow возводит число в заданную степень. 1-м параметром передается число, 2-м - в какую степень его возвести.
Синтаксис: Math.pow(число,степень).
Пример
Число 8 возводится в степень 2:
document.write(Math.pow(8,2))
Пример
Число 8 возводится в степень -3:
document.write(Math.pow(8,-3))
Функция Math.random
Функция Math.random возвращает случайное дробное число от 0 до 1.
Синтаксис: Math.random().
Чтобы получить случайно число в определенном промежутке (дробное или целое) следует и пользоваться специальными приемами:
Случайное дробное число между min и max
function getRandomArbitary(min,max){return Math.random()*(max-min)+min}
Случайное целое между min и max
Использование Math.round() даст неравномерное распределение!
function getRandomInt(min,max){return Math.floor(Math.random()*(max-min+1))+min}
Пример
Будет выведено случайное число от 0 до 1:
document.write(Math.random())
Пример
Будет выведено случайное целое число от 8 до 88:
function getRandomInt(min,max){return Math.floor(Math.random()*(max-min+1))+min};document.write(getRandomInt(8,88))
Функция isNaN
Функция isNaN проверяет, является ли переданный параметр числом или нет.
Функция вернет true, если параметр не является числом и false, если является.
Как она работает: переданный параметр преобразуется к числу. Если это не число (строка, массив и т.п.), то он преобразуется в NaN. Ну, а isNaN проверяет, NaN у нас получился после преобразования или нет.
Учтите, что, к примеру, true преобразуется не к NaN, а к числу 1. Есть и другие подобные подводные камни, смотрите их в описании NaN.
Синтаксис: isNaN(значение).
Пример
Будет выведено false, т.к. параметр является числом:
n=8;document.write(isNaN(n))
Пример
Будет выведено true, т.к. параметр не является числом:
n='Я люблю мир';document.write(isNaN(n))
Функция isFinite
Функция isFinite для проверки параметра на то, что он является конечным числом (т.е. не строкой, массивом и т.п. и не плюс или минус бесконечностью).
Как работает эта функция: она вернет false, если число является плюс или минус бесконечностью (т.е. Infinity или -Infinity) или не числом (т.е. NaN), в остальных случаях вернет true. Т.е. строки, массивы и т.п. будут преобразованы в NaN и соответственно вернут false.
Однако есть исключения: пустая строка '' возвращает true, строка с пробелами ' ' также возвращает true, null возвращает true, для значений true и false также возвращается true.
Это происходит потому, что эти значения корректно преобразуются в числа (а не в NaN).
Если нужна действительно точная проверка на число, которая не считает числом строку из пробелов, логические и специальные значения, используется следующая функция isNumeric:
function isNumeric(num){return !isNaN(parseFloat(num))&&isFinite(num)}
Давайте разберемся, как она работает.
Функция isFinite преобразует параметр к числу и возвращает true, если это не Infinity, -Infinity или NaN.
Таким образом, правая часть отсеет заведомо нечисла, но оставит такие значения как true, false, null, пустую строку '' и строку с пробелами, т.к. они корректно преобразуются в числа.
Чтобы отсеять эти значения, нужна функция parseFloat, которая для true, false, null, '', ' ' вернет NaN.
Так устроена функция parseFloat: она преобразует параметр к строке, т.е. true, false, null становятся "true", "false", "null", а затем считывает из нее число, при этом пустая строка и строка с пробелами дают NaN.
Затем результат parseFloat обрабатывается с помощью !isNaN, чтобы получить true или false вместо NaN.
В результате отсеивается все, кроме строк-чисел и обычных чисел.
Синтаксис: isFinite(значение).
Пример
Будет выведено true, т.к. параметр является числом:
n=3;document.write(isFinite(n))
Пример
Будет выведено false, т.к. параметр не является числом:
n='JS';document.write(isFinite(n))
Пример
Будет выведено false, т.к. параметр является бесконечностью:
n=Infinity;document.write(isFinite(n))
Пример
Будет выведено false, т.к. 1/0 - это по сути Infinity (бесконечность):
n=1/0;document.write(isFinite(n))
Пример
Будет выведено true, т.к. пустая строка, не являющаяся числом (это исключение):
n='';document.write(isFinite(n))
Функция parseInt
Функция parseInt преобразует строку в целое число.
Это нужно для значений типа '12px', когда вначале стоит число, а потом единицы измерения. Если применить функцию parseInt к '12px', то результатом получится число 12 (и это будет действительно число, а не строка).
Преобразование произойдет, если только целое число стоит в начале строки, иначе будет выведено NaN.
2-м параметром можно указать систему счисления числа, и функция вернет число, переведенное из указанной системы счисления в десятичную.
Синтаксис: parseInt(строка,[система счисления]).
Пример
Функция преобразует строку в целое число:
s='10px';document.write(parseInt(s))
Пример
При преобразовании дробная часть будет отброшена:
s='10.3px';document.write(parseInt(s))
Если не нужно отбрасывать дробную часть, используйте функцию parseFloat.
Пример
Функция не смогла прочитать число (т.к. оно не в начале строки) и вернула NaN:
s='width:100px';document.write(parseInt(s))
Функция parseFloat
Функция parseFloat преобразует строку в число с плавающей точкой.
Это нужно для значений типа '12.5px', когда вначале стоит число, а потом единицы измерения. Если применить функцию parseFloat к '12.5px', то результатом получится число 12.5 (и это будет действительно число, а не строка).
Преобразование произойдет, если только целое число стоит в начале строки, иначе будет выведено NaN.
2-м параметром можно указать систему счисления числа, и функция вернет число, переведенное из указанной системы счисления в десятичную.
Синтаксис: parseFloat(строка,[система счисления]).
Пример
Функция parseFloat извлечет дробное число из начала строки:
s='10.3px';document.write(parseFloat(s))
Обратите внимание на то, как в этом случае будет работать функция parseInt, она отбросит дробную часть:
s='10.3px';document.write(parseInt(s))
Пример
Функция не смогла прочитать число (т.к. оно не в начале строки) и вернула NaN:
s='width:100px';document.write(parseFloat(s))
Метод toFixed
Метод toFixed производит округление числа до указанного знака в дробной части.
Количество знаков указывается параметром.
Если число знаков не указано, то по-умолчанию берется 0 знаков, т.е. округление до целого числа.
Параметр метода также может быть отрицательным, в этом случае округлятся будут не знаки в дробной части, а знаки в целой части. К примеру, значение -2 округлит число 12345.6789 в число 12300.
Синтаксис: число.toFixed(количество знаков в дробной части).
Пример
Дроби оставлено только 3 знака в дробной части:
n=1.1111;document.write(n.toFixed(3))
Пример
Дроби также оставлено только 3 знака в дробной части, однако последняя цифра увеличилась на 1, т.к. округление производится по правилам математики:
n=1.1119;document.write(n.toFixed(3))
Пример
Дробь округлена до целого числа, т.к. параметр метода пуст:
n=1.111;document.write(n.toFixed())
Пример
Параметр метода превышает количество знаков в дробной части в исходной дроби, поэтому метод добавил 2 цифры 0 в конец нашей дроби:
n=1.1111;document.write(n.toFixed(6))
Пример
ВНИМАНИЕ! Отрицательное значение не работает!
Параметром метода передано отрицательное значение, округление будет идти уже по целой части числа:
n=12345.6789;document.write(n.toFixed(-2))
Пример
Параметром метода передано отрицательное значение. По правилам математического округления число 4 будет увеличено на 1:
n=12345.6789;document.write(n.toFixed(-1))