Часто результатом расчётов бывает число с большим количеством знаков после запятой. Если это число будет использовано для дальнейших расчётов, то его можно оставить в таком виде. Но иногда требуется округление числа, например для вывода на страницу. В JavaScript округление чисел осуществляется несколькими методами.
Метод Math.round() округляет значение до целого числа.
Math.round (число)
Округление числа производится по математическим правилам. То есть, если после запятой идёт цифра от 0 до 4, то дробная часть просто отбрасывается. А если после запятой идёт цифра от 5 до 9, то дробрая часть отбрасывается, а к целой части прибавляется единица. пример:
JavaScript:
Есть ещё два метода, которые округляют число до целого значения. Метод Math.floor() округляет в меньшую сторону. Он отбрасывает дробную часть числа. А метод Math.ceil() округляет в большую сторону. Он отбрасывает дробную часть, а к целой части прибавляет единицу. Пример:
Конечно, 5 - (-2) это 5+2. Не завбывайте, что число 5 Вы в этой формуле не получите. Максимальное будет 4.999999999. Полученные значения можно округлить до нужной точности.
Если нужны только целые числа, то полученные значения можно округлять до целого в меньшую сторону. К максимуму нужно прибавить единицу, чтобы этот максимум тоже был возможен. Формула получается такая:
целое число = Math.floor (минимум + Math.random() * (максимум + 1 - минимум)
Выведем числа от 10 до 15:
20 |
for (i=1; i= (больше или равно), 3); //false
console.log(5>=3); //true
При сравнении чисел с дробной частью необходимо учитывать погрешности, которые могут возникать во время этих вычислений. Например, в JavaScript сумма чисел (0.2 + 0.4) не равна 0.6: Console.log((0.2+0.4)==0.6); //false Погрешности происходят потому что все вычисления компьютер или другое электронное устройство производит в 2 системе счисления. Т.е. перед тем как выполнить какие-то действия компьютер сначала должен преобразовать представленные в выражении числа в 2 систему счисления. Но, не любое дробное десятичное число можно представить в 2 системе счисления точно. Например, число 0.25 10 в двоичную систему преобразуется точно. 0.125 × 2 = 0.25 | 0 0.25 × 2 = 0.5 | 0 0.5 × 2 = 1 | 1 0.125 10 = 0.001 2 Например, число 0.2 10 можно преобразовать в 2 систему только с определённой точностью: 0.2 × 2 = 0.4 | 0 0.4 × 2 = 0.8 | 0 0.8 × 2 = 1.6 | 1 0.6 × 2 = 1.2 | 1 0.2 × 2 = 0.4 | 0 0.4 × 2 = 0.8 | 0 0.8 × 2 = 1.6 | 1 0.6 × 2 = 1.2 | 1 0.2 × 2 = 0.4 | 0 0.4 × 2 = 0.8 | 0 0.8 × 2 = 1.6 | 1 0.6 × 2 = 1.2 | 1 ... 0.2 10 = 0.001100110011... 2 В результате эти погрешности скажутся при вычисления суммы двух чисел и результатах сравнения. Т.е. получится что на самом деле JavaScript будет видет эту запись следующим образом: 0.6000000000000001==0.6 При вычислениях или отображении чисел с дробной частью необходимо всегда указывать точность, с которой это необходимо делать. Например, сравнить числа до 2 знаков после запятой используя методы toFixed() и toPrecision() : //метод toFixed() console.log((0.2+0.4).toFixed(2)==(0.6).toFixed(2)); //true //метод toPrecision() console.log((0.2+0.4).toPrecision(2)==(0.6).toPrecision(2)); //true Основные математические операцииВ JavaScript существуют следующие математические операторы: + (сложение), - (вычитание), * (умножение), / (деление), % (остаток от деления), ++ (увелить значение на 1), -- (уменьшить значение на 1). 6+3 //9 6-3 //3 6*3 //18 6/3 //2 6%3 //0, т.е. 6:3=2 => 6-3*2 => ост(0) 5%2 //1, т.е. 5:2=2(.5) => 5-2*2 => ост(1) 7.3%2 //1.3, т.е. 7.3:2=3(.65) => 7.3-2*3 => ост(1.3) //знак результата операции % равен знаку первого значения -9%2.5 //-1.5, т.е. 9:2.5=3(.6) => 9-2.5*3 => ост(1.5) -9%-2.5 //-1.5, т.е. 9:2.5=3(.6) => 9-2.5*3 => ост(1.5) -2%5 //-2, т.е. 2:5=0(.4) => 2-5*0 => ост(2) x = 3; console.log(x++); //выводит 3, у уже потом устанавливает 4 console.log(x); //4 x = 3; console.log(++x); //устанавливает 4 и выводит x = 5; console.log(x--); //выводит 5, у уже потом устанавливает 4 console.log(x); //4 x = 5; console.log(--x); //устанавливает 4 и выводит Кроме этого в JavaScript есть комбинированные операторы: x+=y (x=x+y), x-=y (x=x-y), x*=y (x=x*y), x/=y (x=x/y), x%=y (x=x%y). x = 3; y = 6; x+=y; console.log(x); //9 x = 3; y = 6; x-=y; console.log(x); //-3 x = 3; y = 6; x*=y; console.log(x); //18 x = 3; y = 6; x/=y; console.log(x); //0.5 x = 3; y = 6; x%=y; console.log(x); //3 Теперь рассмотрим метод floor (в переводе - пол) , который работает противоположно методу ceil , т.е. он округляет дробное число в МЕНЬШУЮ сторону .
var age = 35.97 ; age = Math .floor (age) ; /* Округляем значение переменной age в меньшую сторону */ document.write (age );
Как видите, метод floor округлил число 35.97 до 35 , то есть в меньшую сторону. Несмотря на то, что 0.97 больше 0.5 (см. ) . В этом уроке были рассмотрены методы объекта Math , позволяющими округлять дробные десятичные числа . Теперь нужно выполнить домашнее задание. Ваша задача написать функцию, которая принимает два параметра. На выходе функция должна выводить этот же массив, но при этом все элементы массива, должны быть округлены с помощью указанного во втором параметре метода объекта Math . Исходный массив: var numberArray = ; Сначала решение этого задания может казаться практически идентичным с решениями домашних задач из первых трёх уроков этой темы . Но не все так просто... Решение №1 - Внимание По условию задачи функция должна принимать два параметра - исходный массив и один из методов: "round" , "ceil" или "floor" . Исходя из этого, я пробовал сделать так ...
function
decimal
(anyArray
,method
) /* Создаем функцию с двумя параметрами */
for (i = 0 ; i < anyArray .length ; i ++ ) { anyArray = Math .method (anyArray ); /* При помощи одного из методов объекта Math округляем текущий элемент массива */ document.write (anyArray + " "
) decimal (numberArray, round ) /* Вызываем функцию и указываем для нее два параметра. Но НЕЛЬЗЯ указывать ИМЯ метода в качестве параметра функции */
В этом решении создаем функцию с двумя параметрами, а когда ее вызываем, то в качестве параметров
функции пробуем указать исходный массив и ИМЯ одного методов: Но результата мы не получим, так как НЕЛЬЗЯ указывать ИМЯ метода в качестве параметра функции . Обратите внимание: ведь не случайно в условии задачи имена методов "round" , "ceil" и "floor" заключены в кавычки . decimal (numberArray, "round" ) - но такая запись тоже не будет верной!!! Решение №2 - Корректируем предыдущее решение Можно решить задачу, указав для функции один параметр.
var numberArray = ; function
decimal
(anyArray
) /* Создаем функцию с одним параметром */
for (i = 0 ; i < anyArray .length ; i ++ ) /* Перебираем элементы массива */ { /* При помощи метода round объекта Math округляем текущий элемент массива */ document.write (anyArray + " - Округленный элемент "
) /* Выводим ОКРУГЛЕННЫЙ элемент массива */
decimal (numberArray ) /* Вызываем функцию и указываем один параметр - исходный массив */
Здесь удалось достичь нужного результата: метод round округлил все числа по . Но не выполнено условие , так как функция принимает лишь один параметр. Решение №3 - Функция с двумя параметрами Здесь задача решена правильно. Для этого нужно было вспомнить тему условий в javascript и применить несколько условий одновременно.
var numberArray = ; function
decimal
(anyArray
,method
) if (method
"
) Else if(method
"
) else if(method
"
) }
34.82 - исходный элемент массива 12.9 - исходный элемент массива 17.01 - исходный элемент массива 78.51 - исходный элемент массива Это правильное решение Домашнего задания. Здесь для функции указаны два параметра согласно условию. Попробуйте в последней строке этого решения:
Решение №4 - Функция с двумя параметрами + метод prompt Я решил немного оптимизировать предыдущее решение и добавил метод prompt , который вызывает модальное окно, содержащее поле для ввода информации. Теперь благодаря этому можно будет ввести название одного из методов round , floor или ceil в поле для ввода и получить соответствующий результат.
var numberArray = ; function
decimal
(anyArray
,method
) if (method
== "round"
) /* 1-е условие */
"
) Else if(method
== "ceil"
) /* 2-е условие */
"
) else if(method
== "floor"
) /* 3-е условие */
"
) /* Добавляем метод prompt */
var method = prompt ("Введите один из методов: round, ceil или floor" ); if (method
== "floor"
) /* 1-е условие */
"
) else if (method
== "round"
) /* 2-е условие */
"
) else if (method
== "ceil"
) /* 3-е условие */
"
) else /* Иначе... */
"
) decimal (numberArray, method ) /* Вызываем функцию */
Вот так работают методы round , floor или ceil объекта Math , которые округляют дробные числа. Тематические материалы:
Обновлено: 20.04.2021
103583
Если заметили ошибку, выделите фрагмент текста и нажмите Ctrl+Enter
Рубрики сайта |