diff --git a/1-js/4-data-structures/2-number/article.md b/1-js/4-data-structures/2-number/article.md index 3a7b95ca..071447bf 100644 --- a/1-js/4-data-structures/2-number/article.md +++ b/1-js/4-data-structures/2-number/article.md @@ -12,7 +12,7 @@ alert( 0xFF ); // 255 в шестнадцатиричной системе ``` -Также доступна запись в *"научном формате"* (ещё говорят "запись с плавающей точкой"), который выглядит как `<число>e<кол-во нулей>`. +Также доступна запись в *"научном формате"* (ещё говорят "запись с плавающей точкой"), который выглядит как `<число>e<количество нулей>`. Например, `1e3` -- это `1` с `3` нулями, то есть `1000`. @@ -36,7 +36,7 @@ alert( 3e-5 ); // 0.00003 <-- 5 нулей, включая начальный Как правило, ошибка в программе... Во всяком случае, в большинстве языков программирования это именно так. -Но создатель JavaScript решил пойти математически правильным путем. Ведь чем меньше делитель, тем больше результат. При делении на очень-очень маленькое число должно получиться очень большое. В математическом анализе это описывается через [пределы](https://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%B5%D0%B4%D0%B5%D0%BB_(%D0%BC%D0%B0%D1%82%D0%B5%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0)), и если подразумевать предел, то в качестве результата деления на `0` мы получаем "бесконечность", которая обозначается символом `∞` или, в JavaScript: `"Infinity"`. +Но создатель JavaScript решил пойти математически правильным путем. Ведь чем меньше делитель, тем больше результат. При делении на очень-очень маленькое число должно получиться очень большое. В математическом анализе это описывается через [пределы](https://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%B5%D0%B4%D0%B5%D0%BB_(%D0%BC%D0%B0%D1%82%D0%B5%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0)), и если подразумевать предел, то в качестве результата деления на `0` мы получаем "бесконечность", которая обозначается символом `∞` (в JavaScript `Infinity`). ```js run alert( 1 / 0 ); // Infinity @@ -79,7 +79,7 @@ alert( 0 / 0 ); // NaN Значение `NaN` используется для обозначения математической ошибки и обладает следующими свойствами: -- Значение `NaN` -- единственное, в своем роде, которое *не равно ничему, включая себя*. +- Значение `NaN` -- единственное в своем роде, которое *не равно ничему, включая себя*. Следующий код ничего не выведет: @@ -122,14 +122,14 @@ if (n !== n) alert( 'n = NaN!' ); ```smart header="Математические операции в JS безопасны" Никакие математические операции в JavaScript не могут привести к ошибке или "обрушить" программу. -В худшем случае, результат будет `NaN`. +В худшем случае результат будет `NaN`. ``` ## isFinite(n) Итак, в JavaScript есть обычные числа и три специальных числовых значения: `NaN`, `Infinity` и `-Infinity`. -Тот факт, что они, хоть и особые, но -- числа, демонстрируется работой оператора `+`: +Тот факт, что они, хоть и особые, но числа, демонстрируется работой оператора `+`: ```js run var value = prompt("Введите Infinity", 'Infinity'); @@ -141,7 +141,7 @@ var number = +value; alert( number ); // Infinity, плюс преобразовал строку "Infinity" к такому "числу" ``` -Обычно если мы хотим от посетителя получить число, то `Infinity` или `NaN` нам не подходят. Для того, чтобы отличить "обычные" числа от таких специальных значений, существует функция `isFinite`. +Обычно если мы хотим от посетителя получить число, то `Infinity` или `NaN` нам не подходят. Для того чтобы отличить "обычные" числа от таких специальных значений, существует функция `isFinite`. **Функция `isFinite(n)` преобразует аргумент к числу и возвращает `true`, если это не `NaN/Infinity/-Infinity`:** @@ -155,7 +155,7 @@ alert( isFinite(NaN) ); // false Большинство арифметических операций и математических функций преобразуют значение в число автоматически. -Для того, чтобы сделать это явно, обычно перед значением ставят унарный плюс `'+'`: +Для того чтобы сделать это явно, обычно перед значением ставят унарный плюс `'+'`: ```js run var s = "12.34"; @@ -185,7 +185,7 @@ alert( '12.34' / "-2" ); // -6.17 ## Мягкое преобразование: parseInt и parseFloat -В мире HTML/CSS многие значения не являются в точности числами. Например, метрики CSS: `10pt` или `-12px`. +В мире HTML/CSS многие значения не являются в точности числами. Например метрики CSS: `10pt` или `-12px`. Оператор `'+'` для таких значений возвратит `NaN`: @@ -224,7 +224,7 @@ alert( parseInt('FF', 16) ); // 255 Для проверки строки на число можно использовать функцию `isNaN(str)`. -Она преобразует строку в число аналогично `+`, а затем вернёт `true`, если это `NaN`, т.е. если преобразование не удалось: +Она преобразует строку в число аналогично `+`, а затем вернёт `true`, если это `NaN`, то есть если преобразование не удалось: ```js run var x = prompt("Введите значение", "-11.5"); @@ -260,16 +260,16 @@ function isNumeric(n) { - Функция `isFinite(n)` преобразует аргумент к числу и возвращает `true`, если это не `Infinity/-Infinity/NaN`. - Таким образом, правая часть отсеет заведомо не-числа, но оставит такие значения как `true/false/null` и пустую строку `''`, т.к. они корректно преобразуются в числа. + Таким образом, правая часть отсеет заведомо не-числа, но оставит такие значения как `true/false/null` и пустую строку `''`, так как они корректно преобразуются в числа. - Для их проверки нужна левая часть. Вызов `parseFloat(true/false/null/'')` вернёт `NaN` для этих значений. - Так устроена функция `parseFloat`: она преобразует аргумент к строке, т.е. `true/false/null` становятся `"true"/"false"/"null"`, а затем считывает из неё число, при этом пустая строка даёт `NaN`. + Так устроена функция `parseFloat`: она преобразует аргумент к строке, то есть `true/false/null` становятся `"true"/"false"/"null"`, а затем считывает из неё число, при этом пустая строка даёт `NaN`. В результате отсеивается всё, кроме строк-чисел и обычных чисел. ## toString(система счисления) -Как показано выше, числа можно записывать не только в 10-чной, но и в 16-ричной системе. Но бывает и противоположная задача: получить 16-ричное представление числа. Для этого используется метод `toString(основание системы)`, например: +Как показано выше, числа можно записывать не только в 10-ричной, но и в 16-ричной системе. Но бывает и противоположная задача: получить 16-ричное представление числа. Для этого используется метод `toString(основание системы)`, например: ```js run var n = 255; @@ -389,7 +389,7 @@ alert( price.toFixed(1) ); // 6.3 alert( Math.round(price * 10) / 10 ); // 6.4 ``` -Как видно, результат разный! Вариант округления через `Math.round` получился более корректным, так как по общепринятым правилам `5` округляется вверх. А `toFixed` может округлить его как вверх, так и вниз. Почему? Скоро узнаем! +Как видно результат разный! Вариант округления через `Math.round` получился более корректным, так как по общепринятым правилам `5` округляется вверх. А `toFixed` может округлить его как вверх, так и вниз. Почему? Скоро узнаем! ```` ## Неточные вычисления @@ -438,7 +438,7 @@ alert( 0.1.toFixed(20) ); // 0.10000000000000000555 alert( (0.1 * 10 + 0.2 * 10) / 10 ); // 0.3 ``` - Это работает, т.к. числа `0.1*10 = 1` и `0.2*10 = 2` могут быть точно представлены в двоичной системе. + Это работает, так как числа `0.1*10 = 1` и `0.2*10 = 2` могут быть точно представлены в двоичной системе. 2. Сложить, а затем округлить до разумного знака после запятой. Округления до 10-го знака обычно бывает достаточно, чтобы отсечь ошибку вычислений: ```js run @@ -483,13 +483,13 @@ JavaScript предоставляет базовые тригонометрич : Возвращает угол до точки `(y, x)`. Описание функции: [Atan2](http://en.wikipedia.org/wiki/Atan2). `Math.sin(x)` -: Вычисляет синус `x` (в радианах) +: Вычисляет синус `x` `Math.cos(x)` -: Вычисляет косинус `x` (в радианах) +: Вычисляет косинус `x` `Math.tan(x)` -: Возвращает тангенс `x` (в радианах) +: Возвращает тангенс `x` ### Функции общего назначения @@ -517,7 +517,7 @@ JavaScript предоставляет базовые тригонометрич : Возвращает наименьший из списка аргументов `Math.random()` -: Возвращает псевдо-случайное число в интервале [0,1) - то есть между 0(включительно) и 1(не включая). Генератор случайных чисел инициализуется текущим временем. +: Возвращает псевдослучайное число в интервале [0,1) - то есть между 0 (включительно) и 1 (не включая). Генератор случайных чисел инициализуется текущим временем. ### Форматирование