создание и продвижение сайта (вбиваю в ТОП-10, как гвозди)Настройка и сопровождение платной рекламы яндекс.директ

Урок 6. Математические функции в 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())

Пример

Будет выведено минимальное значение массива:

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())

Пример

Будет выведено максимальное значение массива:

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))

Практика

Задачи для решения

Работа с %

Даны переменные a=8, b=3. Найти остаток от деления a/b.

a=8,b=3;document.write(a%b)

Даны переменные a, b. Проверить, что a делится без остатка на b. Если это так, вывести 'Делится' и результат деления, иначе вывести 'Делится с остатком' и остаток от деления. Показать решение.

a=8,b=3;r=a%b;if(r!=0){document.write('Делится с остатком '+r)}else{document.write('Делится, результат деления: '+(a/b))}

a=8,b=4;r=a%b;if(r!=0){document.write('Делится с остатком '+r)}else{document.write('Делится, результат деления: '+(a/b))}

Работа со степенью и корнем

Для решения задач данного блока понадобится метод Math.pow, Math.sqrt.

Возвести 2 в 8 степень. Результат записать в переменную s.

Найти квадратный корень из 88.

Дан массив с элементами 4,2,5,8,7,0,9. Найти квадратный корень из суммы кубов его элементов. Для решения использовать циклом for.

Работа с функциями округления

Для решения задач данного блока вам понадобятся следующие функции: Math.round, Math.ceil, Math.floor, toFixed, toPrecision.

Найти квадратный корень из 8. Результат округлить до целых, до десятых, до сотых.

Найти квадратный корень из 8. Округлить результат в большую и меньшую стороны, записать результаты округления в объект с ключами 'floor' и 'ceil'.

Нахождение максимального и минимального числа

Для решения задач данного блока понадобится метод Math.max, Math.min.

Даны числа 4,-2,5,8,-8,0,1. Найти минимальное и максимальное число.

Работа с рандомом

Для решения задач данного блока понадобится метод Math.random.

Выведите на экран случайное целое число от 1 до 8.

Заполните массив 8-ю случайными целыми числами. (Подсказка: нужно воспользоваться циклами for или while).

a=[];for(i=0;i<10;i++){a[i]=Math.floor(Math.random()*(100-1+1))+1}document.write(a)

Работа с модулем

Для решения задач данного блока понадобится метод Math.abs.

Даны переменные a, b. Найти модуль разности a, b. Проверить работу скрипта самостоятельно для различных a, b.

Даны переменные a, b. Отнять от a b и результат присвойте переменной c. Сделать так, чтобы в любом случае в переменную c записалось положительное значение. Проверить работу скрипта при a и b, равных соответственно 3 и 5, 6 и 1.

Задачи

Дан массив a. Найти среднее арифметическое его элементов. Проверить задачу на массиве с элементами 8,9,1,2,3,5.

Напишите скрипт, который будет находить факториал числа. Например, 4!=1*2*3*4.

Содержание

Отвечу на любые вопросы. С уважением, Дмитрий Владимирович.

Ваше письмо×
Free Web Hosting