среда, 24 мая 2017 г.

Sorax. 5. Числа

Все числа в языке JS вещественные. Представляем числа в диапазоне от -2 в 53 степени до 2 в 53 степени. Все этого диапазона для целых чисел будет теряться точность.
Для побитовых операций числа сначала преобразуются в 32-битный целый тип.
Числа записанные прямо в коде программы называются числовыми литералами. Мы можем записывать числа в десятичной системе счисления и 16-тиричной системе счисления. Например, 0xfffcc. В такой записи x может быть в нижнем или верхнем регистре.
Используется редко, но если число начинается с 0, то это восьмиричная система счисления.


Есть также числа с плавающей точкой. 12.45 или .89 Есть экспоненты 1.34е4 или 4.5Е. Е может быть в нижнем и верхнем регистре. Экспонента может быть, как положительной, так и отрицательной.

Для преобразования вещественных чисел у объекта Number есть несколько методов. В JS есть объекты-обертки.


var n = 5000;
console.log(typeof n); // number

var N = new Number(4000); // это функция конструктор, она пишется с большой буквы
console.log(typeof N); // object
console.log(typeof N.toFixed(2)); // преобразуем в число с плавающей точкой. 2 - кол-во знаков после точки

// Эти методы можно вызывать не только у объектов, но и переменных содержащих значения простых типов и у литералов простых типов.
// Не с объектами это работает, потому что интерпритатор создает объекты-обертки на лету.
k = 5000;
console.log(typeof n.toFixed(2));
console.log(2 .toFixed(2)); // после 2 должен быть пробел

// Конструктор Number будет использоваться редко, т.к быстрее вызывать методы у самих переменных.

console.log(n.toExponential(4)); // 5.0000e+3. Для перевода в экспонинциальную форму, у которй в качестве параметра кол-во цифр после точки
console.log(n.toPrecision(3)); // 5.00e+3. Для вывода с определенной точностью.

// АРИФМЕТИЧЕСКИЕ ОПЕРАТОРЫ
console.log(+10); // унарный плюс, который используется редко
console.log(-10); // унарный минус, который используется часто

// Операторы инкремента и декримента ++ и --
// Они имеют побочный эффект, т.к они изменяют переменную.
var i = 10;
console.log(++i); // 11. Это префиксный инкремент. Сначала увеличивает значение переменной, а потом возвращает.
console.log(i); // 11
console.log(i++); // Это постфиксный инкремент. Сначала возвращает значение переменной, а потом увеличивает ее значение.
console.log(i); // 12

// БИНАРНЫЕ ОПЕРАТОРЫ
console.log(5 + 10);
console.log(7 - 3);
console.log(5 * 9);
console.log(10 / 3); // это обычное деление, а не целочисленное
console.log(10 % 3); // остаток от деления. 1

var r = 100;
r = r + 20;
console.log(r); // 120
r = r * 20;
console.log(r);

// Более удобная запись!
// Подобный оператор есть для всех арифметических операторов: /=

var r = 100;
r += 20;
console.log(r); // 120
r *= 20;
console.log(r);

// ОПЕРАТОРЫ ОТНОШЕНИЯ
console.log(5 > 10); // false
console.log(5 < 10); // true
console.log(10 >= 10); // true
console.log(10 <= 10); // true
console.log(10 === 10); // === означает равенство. == означает равенство приведенных типов
console.log(10 !== 10);
console.log(10 === "10");

// У нас есть объект Math, который предоставляет методы для более сложных математических операций.
console.log(Math.sqrt(2)); // извлечение квадратного корня
console.log(Math.pow(3,5)); // возведение в степень
console.log(Math.PI);
console.log(Math.E);

// В JS при выходе из числового диапазона мы не получим ошибку, а получим infinity или -infinity.

// Деление на 0 не вызывает ошибки. Мы получим infinity или -infinity. Если делить 0 на 0, то мы получим NaN
// NaN дает деление бесконечости на бесконечость или извлечение корня из отрицательного числа.

// Сравнение NaN с самим собой дает false.

// NaN и infinity - идентификаторы.

// ОШИБКИ ОКРУГЛЕНИЯ.
console.log(0.2 + 0.1); // 0.30000000000000004
// Это проблема языка, который использует вещественные числа. Для вычислений лучше использовать целые числа.

Комментариев нет:

Отправить комментарий