Далее на странице...
В прошлой заметке были рассмотрены методы объекта Math, позволяющие округлять дробные десятичные числа.
Теперь нужно выполнить самостоятельно практическую задачу. После прочтения условия, его решение может казаться практически идентичным с решениями практических задач из темы по объекту Number. Но не все так просто.
Ваша задача написать функцию, которая принимает два параметра.
1. Массив, состоящий из чисел с дробями.
2. Метод округления "round", "ceil" или "floor".
На выходе функция должна выводить этот же массив, но при этом все элементы массива, должны быть округлены с помощью указанного во втором параметре метода объекта Math.
Исходный массив:
var numberArray = [34.82, 12.90, 17.01, 78.51];
Решение №1 - Внимание
По условию задачи функция должна принимать два параметра - исходный массив и один из методов: round, ceil или floor. Исходя из этого, можно пробовать сделать так...
<script type = "text/javascript">
var numberArray = [34.82, 12.90, 17.01, 78.51];
function decimal(anyArray,method) /* Создаем функцию с двумя параметрами */
{
for (i = 0; i < anyArray.length; i++) /* Перебираем элементы массива */
{
document.write(anyArray[i] + " - исходный элемент массива <br />") /* Выводим текущий элемент массива */
anyArray[i] = Math.method(anyArray[i]); /* При помощи одного из методов объекта Math округляем текущий элемент массива */
document.write(anyArray[i] + "<p>") /* Выводим ОКРУГЛЕННЫЙ элемент массива */
}
}
decimal(numberArray, round) /* Вызываем функцию и указываем для нее два параметра. Но НЕЛЬЗЯ указывать ИМЯ метода в качестве параметра функции */
</script>
В этом решении создаем функцию с двумя параметрами, а когда ее вызываем, то в качестве параметров функции пробуем указать исходный массив и ИМЯ одного методов:
Но результата мы не получим, так как НЕЛЬЗЯ указывать ИМЯ метода в качестве параметра функции.
Обратите внимание: не случайно в условии задачи имена методов "round", "ceil" и "floor" заключены в кавычки.
decimal(numberArray, "round") - но такая запись тоже не будет верной!!!
Решение №2 - Корректируем предыдущее решение
Конечно, можно решить эту задачу, указав для функции один параметр.
<script type = "text/javascript">
var numberArray = [34.82, 12.90, 17.01, 78.51];
function decimal(anyArray) /* Создаем функцию с одним параметром */
{
for (i = 0; i < anyArray.length; i++) /* Перебираем элементы массива */
{
document.write(anyArray[i] + " - исходный элемент массива <br />") /* Выводим текущий элемент массива */
anyArray[i] = Math.round(anyArray[i]); /* При помощи метода round объекта Math округляем текущий элемент массива */
document.write(anyArray[i] + " - Округленный элемент <p>") /* Выводим ОКРУГЛЕННЫЙ элемент массива */
}
}
decimal(numberArray) /* Вызываем функцию и указываем один параметр - исходный массив */
</script>
Решение №2 - Функция с одним параметром
34.82 - исходный элемент массива
35 - Округленный элемент
12.9 - исходный элемент массива
13 - Округленный элемент
17.01 - исходный элемент массива
17 - Округленный элемент
78.51 - исходный элемент массива
79 - Округленный элемент
Здесь удалось достичь нужного результата: метод round округлил все числа по классическим правилам. Но при этом не выполнено условие задачи, так как функция принимает лишь один параметр.
Решение №3 - Функция с двумя параметрами
Чтобы правильно решить задачу, нужно вспомнить тему условий и применить несколько условий одновременно.
<script type = "text/javascript">
var numberArray = [34.82, 12.90, 17.01, 78.51];
function decimal(anyArray,method)
{
for (i = 0; i < anyArray.length; i++)
{
document.write(anyArray[i] + " - исходный элемент массива <br />");
if (method == "round") /* 1-е условие */
{
anyArray[i] = Math.round(anyArray[i]);
document.write(anyArray[i] + " - стандартное округление <p>")
}
else if(method == "ceil") /* 2-е условие */
{
anyArray[i] = Math.ceil(anyArray[i]);
document.write(anyArray[i] + " - округляем в БОЛЬШУЮ сторону <p>")
}
else if(method == "floor") /* 3-е условие */
{
anyArray[i] = Math.floor(anyArray[i]);
document.write(anyArray[i] + " - округляем в МЕНЬШУЮ сторону <p>")
}
}
}
decimal(numberArray, "ceil")/* Вторым параметром функции - в кавычках указываем имя одного из методов */
</script>
Решение №3 - Функция с двумя параметрами
34.82 - исходный элемент массива
35 - округляем в БОЛЬШУЮ сторону
12.9 - исходный элемент массива
13 - округляем в БОЛЬШУЮ сторону
17.01 - исходный элемент массива
18 - округляем в БОЛЬШУЮ сторону
78.51 - исходный элемент массива
79 - округляем в БОЛЬШУЮ сторону
Это правильное решение задачи. Здесь согласно условию для функции указаны два параметра.
Пробуйте в последней строке этого решения:
decimal(numberArray, "ceil") в качестве второго параметра функции указать имя одного из методов "round" и "floor" объекта Math.
Решение №4 + метод prompt
Можно оптимизировать последнее решение и добавить метод prompt, чтобы вызвать модальное окно, содержащее поле для ввода информации.
Благодаря этому шагу можно будет ввести название одного из методов round, floor или ceil в поле для ввода и получить соответствующий результат.
<script type = "text/javascript">
var numberArray = [34.82, 12.90, 17.01, 78.51];
function decimal(anyArray,method)
{
for (i = 0; i < anyArray.length; i++)
{
document.write(anyArray[i] + " - исходный элемент массива <br />");
if (method == "round") /* 1-е условие */
{
anyArray[i] = Math.round(anyArray[i]);
document.write(anyArray[i] + " <p>")
}
else if(method == "ceil") /* 2-е условие */
{
anyArray[i] = Math.ceil(anyArray[i]);
document.write(anyArray[i] + " <p>")
}
else if(method == "floor") /* 3-е условие */
{
anyArray[i] = Math.floor(anyArray[i]);
document.write(anyArray[i] + " <p>")
}
}
}
/* Добавляем метод prompt */
var method = prompt("Введите один из методов: round, ceil или floor");
if (method == "floor") /* 1-е условие */
{
document.write("Вы ввели метод " + method + " , который округляет числа в МЕНЬШУЮ сторону <p>")
}
else if (method == "round") /* 2-е условие */
{
document.write("Вы ввели метод " + method + " , который округляет числа по стандартным правилам <p>")
}
else if (method == "ceil") /* 3-е условие */
{
document.write("Вы ввели метод " + method + " , который округляет числа в БОЛЬШУЮ сторону <p>")
}
else /* Иначе... */
{
document.write("Вы не ввели или ошибочно ввели метод <p>")
}
decimal(numberArray, method) /* Вызываем функцию */
</script>
Это задание неплохо иллюстрирует, как работают методы round, floor или ceil объекта Math, которые округляют дробные числа.