Тип данных Number. Его особенности, свойства, методы. — КиберПедия 

Своеобразие русской архитектуры: Основной материал – дерево – быстрота постройки, но недолговечность и необходимость деления...

Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначен­ные для поддерживания проводов на необходимой высоте над землей, водой...

Тип данных Number. Его особенности, свойства, методы.

2017-06-29 227
Тип данных Number. Его особенности, свойства, методы. 0.00 из 5.00 0 оценок
Заказать работу

 

Все числа в JavaScript, как целые так и дробные, имеют тип Number и хранятся в 64-битном формате.

 

Способы записи

 

В JavaScript можно записывать числа не только в десятичной, но и в шестнадцатеричной (начинается с 0x) системе счисления:

 

alert(0xFF); // 255 в шестнадцатиричной системе

 

Экспоненциальное представление, которое выглядит как <число>e<количество нулей>:

 

alert(3e5); // 300000

 

Если количество нулей отрицательно, то число сдвигается вправо за десятичную точку, так что получается десятичная дробь:

 

alert(3e-5); // 0.00003

 

Деление на ноль, Infinity

 

alert(1 / 0); // Infinity

 

Infinity – особенное численное значение, которое ведет себя в точности как математическая бесконечность. Infinity больше любого числа. Добавление к бесконечности не меняет её:

 

alert(Infinity + 5 == Infinity); // true

 

Бывает и минус бесконечность -Infinity:

 

alert(-1 / 0); // -Infinity

 

Бесконечность можно получить также, если сделать очень большое число, для которого количество разрядов в двоичном представлении не помещается в соответствующую часть стандартного 64-битного формата, например:

 

alert(1e500); // Infinity

 

NaN

 

Если математическая операция не может быть совершена, то возвращается специальное значение NaN (Not-A-Number). Например, деление 0/0 в математическом смысле неопределено, поэтому его результат NaN:

 

alert(0 / 0); // NaN

 

Значение NaN используется для обозначения математической ошибки и обладает следующими свойствами:

 

ü Значение NaN – единственное в своем роде, которое не равно ничему, включая себя.

 

NaN === NaN // false

 

ü Значение NaN можно проверить специальной функцией isNaN(n), которая преобразует аргумент к числу и возвращает true, если получилось NaN, и false – для любого другого значения. Если аргумент isNaN – не число, то он автоматически преобразуется к числу.

 

isNaN(NaN); // true

isNaN("12"); // false, строка преобразовалась к обычному числу 12

 

isFinite(n)

 

Функция isFinite(n) преобразует аргумент к числу и возвращает true, если это не NaN/Infinity/-Infinity:

 

isFinite(1); // true

isFinite(Infinity); // false

isFinite(NaN); // false

 

Преобразование к числу

 

Большинство арифметических операций и математических функций преобразуют значение в число автоматически. Для того чтобы сделать это явно, обычно перед значением ставят унарный плюс '+':

 

alert(+"12.34"); // 12.34

 

При этом, если строка не является в точности числом, то результат будет NaN:

 

alert(+"12test"); // NaN

 

Number — конструктор числа.

 

Number(12); // 12

Number('12.34'); // 12.34

Number('12text'); // NaN

 

Мягкое преобразование: parseInt и parseFloat

 

В мире HTML/CSS многие значения не являются в точности числами. Например метрики CSS: 10pt или -12px. Для удобного чтения таких значений существует функция parseInt:

 

parseInt('12px'); // 12

 

Функция parseInt и ее аналог parseFloat преобразуют строку символ за символом, пока это возможно. При возникновении ошибки возвращается число, которое получилось. Функция parseInt читает из строки целое число, а parseFloat – дробное. Конечно, существуют ситуации, когда parseInt/parseFloat возвращают NaN. Это происходит при ошибке на первом же символе:

 

parseInt('a123'); // NaN

 

Функция parseInt также позволяет указать систему счисления, то есть считывать числа, заданные в шестнадцатиричной и других системах счисления:

 

parseInt('FF', 16); // 255

 

toPrecision(precision)

 

— приведение к десятичной форме (precision — число значащих цифр, 1..21)

 

(123.456789).toPrecision(2); // '1.2e+2'

(123.456789).toPrecision(4); // '123.5

(123.456789).toPrecision(); // '123.456789'

 

toExponential(fractionDigits)

 

— приведение к экспоненциальной форме (fractionDigits — количество знаков после запятой, 0..20)

 

(123.456789).toExponential(0); // 1e+2

(123.456789).toExponential(2); // 1.23e+2

(123.456789).toExponential(5); // 1.23457e+2

 

toString(radix)

 

— преобразует число в строку (radix — основание системы счисления, 2..36 (по-умолчанию — 10))

 

(123.456789).toString(8); // '173.3517003756026054'

(123.456789).toString(16); // '7b.74f01fb82c2c'

 

Округление

 

Одна из самых частых операций с числом – округление. В JavaScript существуют целых 3 функции для этого:

 

Math.floor - округляет вниз

Math.ceil - округляет вверх

Math.round - округляет до ближайшего целого

 

Math.floor(3.1); // 3

Math.ceil(3.1); // 4

Math.round(3.1); // 3

 

toFixed(precision)

 

Существует также специальный метод toFixed(precision), который округляет число до точности precision и возвращает результат в виде строки (округление идёт до ближайшего значения):

 

(12.34).toFixed(1); // "12.3"

 

Итоговая строка, при необходимости, дополняется нулями до нужной точности:

 

(12.34).toFixed(5)); // "12.34000"

 

Неточные вычисления

 

(0.1 + 0.2) == 0.3 // false

(0.1 + 0.2); // 0.30000000000000004

(0.1 + 0.2 > 0.3); // true

 

Всё дело в том, что на число выделяется ровно 8 байт (=64 бита), не больше и не меньше.

Число 0.1 (одна десятая) записывается просто в десятичном формате. Но в двоичной системе счисления это бесконечная дробь, так как единица на десять в двоичной системе так просто не делится. Двоичное значение бесконечных дробей хранится только до определенного знака, поэтому возникает неточность. Её даже можно увидеть:

 

(0.1).toFixed(20); // 0.10000000000000000555

 

Когда мы складываем 0.1 и 0.2, то две неточности складываются, получаем незначительную, но всё же ошибку в вычислениях. Конечно, это не означает, что точные вычисления для таких чисел невозможны. Например, есть два способа сложить 0.1 и 0.2:

 

ü Сделать их целыми, сложить, а потом поделить:

 

(0.1 * 10 + 0.2 * 10) / 10; // 0.3

 

ü Сложить, а затем округлить до разумного знака после запятой. Округления до 10-го знака обычно бывает достаточно, чтобы отсечь ошибку вычислений.

 

Из 64 бит, отведённых на число, сами цифры числа занимают до 52 бит, остальные 11 бит хранят позицию десятичной точки и один бит – знак. Так что если 52 бит не хватает на цифры, то при записи пропадут младшие разряды.

 

Другие математические методы

 

JavaScript предоставляет базовые тригонометрические и некоторые другие функции для работы с числами.

 

Встроенные функции для тригонометрических вычислений:

 

Math.acos(x) - возвращает арккосинус x (в радианах)

Math.asin(x) - возвращает арксинус x (в радианах)

Math.atan(x) - возвращает арктангенс x (в радианах)

Math.sin(x) - вычисляет синус x

Math.cos(x) - вычисляет косинус x

Math.tan(x) - возвращает тангенс x

 

Разные полезные функции:

 

Math.sqrt(x) - возвращает квадратный корень из x

Math.log(x) - возвращает натуральный (по основанию e) логарифм x

Math.pow(x, exp) - возводит число в степень

Math.abs(x) - возвращает абсолютное значение числа

Math.max(a, b, c...) - возвращает наибольший из списка аргументов

Math.min(a, b, c...) - возвращает наименьший из списка аргументов

 


Поделиться с друзьями:

Наброски и зарисовки растений, плодов, цветов: Освоить конструктивное построение структуры дерева через зарисовки отдельных деревьев, группы деревьев...

Типы сооружений для обработки осадков: Септиками называются сооружения, в которых одновременно происходят осветление сточной жидкости...

Папиллярные узоры пальцев рук - маркер спортивных способностей: дерматоглифические признаки формируются на 3-5 месяце беременности, не изменяются в течение жизни...

Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.019 с.