JavaScript: number
Значениями типа number в JavaScript являются целые числа и числа с плавающей точкой (десятичные дроби). Для записи чисел предусмотрено несколько разных форматов числовых литералов.
Самый простой из них – формат десятичного целого числа:
12 // Целое число
Целые числа можно записывать в виде шестнадцатеричных или восьмеричных литералов. Запись шестнадцатеричного литерала начинается с последовательности символов 0x
или 0X
(первый символ – цифра нуль, второй – буква "x"), за которой следует последовательность шестнадцатеричных цифр (от 0
до F
). Если в литерале присутствует цифра не из этого диапазона, то будет вызвана ошибка. Буквы, которыми выражаются цифры, могут быть как строчными, так прописными:
alert(0Xff); // Целое число (255) в виде шестнадцатеричного литерала alert(0xFF); // Тоже самое
Запись восьмеричного литерала начинается с последовательности символов 0o
или 0O
(первый символ – цифра нуль, второй – буква "o"), за которой следует последовательность восьмеричных цифр (от 0
до 7
). Если в литерале присутствует цифра не из этого диапазона, то будет вызвана ошибка:
alert(0o70); // Целое число (56), записанное с помощью восьмеричного литерала.
В каком бы формате не были записаны числа, по умолчанию все они выводятся в виде десятичного числа:
alert(0xff - 055); // 210
Чтобы использовать число с плавающей точкой, необходимо ввести десятичную точку и как минимум одну цифру после неё. Нуль перед десятичной точкой необязателен:
0.3 // Литерал числа с плавающей точкой .3 // Тоже самое
Числа с плавающей точкой представляются с точностью до 17-го десятичного разряда (не включая сам 17 разряд). Из-за этого например, сложение 0.1 и 0.2 даёт в результате 0.30000000000000004 вместо 0.3. Факт того, что число с плавающей точкой не может быть представлено точно, может приводить к проблемам при сравнении чисел после вычислений:
var x = 0.3 - 0.2; var y = 0.2 - 0.1; document.write((x == y) + "<br>"); // false document.write((x == 0.1) + "<br>"); // false document.write(y == 0.1); // trueПопробовать »
Важно понимать, что эта проблема не является чем-то характерным для JavaScript, она проявляется во всех языках программирования, где для представления чисел c плавающей точкой используется формат, определяемый стандартом IEEE-754. Точность чисел с плавающей точкой вполне приемлема для большинства арифметических операций, проблема может возникать лишь при проверке на равенство результатов вычислений производимых с числами с плавающей точкой.
Так как для хранения чисел с плавающей точкой требуется вдвое больше памяти, чем для целых чисел, интерпретатор по возможности преобразует числа с плавающей точкой в целые числа. Если после десятичной точки ничего не указано, число преобразуется в целое. Если число не имеет дробной части (например, 1.0
), оно преобразуется в целое:
alert(Number.isInteger(10.)); // true alert(Number.isInteger(10.0)); // true
Числа можно представлять в виде экспоненциальной записи. Экспоненциальная запись означает число, умноженное на 10 в указанной степени. Экспоненциальная запись состоит из числа, за которым ставится прописная или строчная буква "E
", после которой можно поставить необязательный знак + или - и далее показатель степени числа 10:
3.52e5; // 352000 7E-4; // 0.0007
По умолчанию интерпретатор переводит в экспоненциальную запись любые числа с плавающей точкой, содержащие как минимум шесть нулей после точки:
alert(0.0000005); // 5e-7
Любому числовому литералу может предшествовать знак -
(минус), делающий число отрицательным:
var temperature = -20;
Для представления чисел в JavaScript используется 64-битный формат, определяемый стандартом IEEE-754. Этот формат способен представлять числа с плавающей точкой в диапазоне от 5e-324 до 1.7976931348623157e+308, а все целые числа в диапазоне от -9007199254740992 до 9007199254740992 включительно.
С этой темой смотрят: