Как сделать число целым js

Добавил пользователь Владимир З.
Обновлено: 19.09.2024


JavaScript имеет только числа с плавающей точкой. Этот пост объясняет, как обрабатываются целочисленные операции, в частности операции битового сдвига. Это также ответит на вопрос, является ли n >>> 0 хорошим способом преобразования числа в неотрицательное целое число.

Препараты

Поскольку мы будем часто рассматривать двоичные числа, мы определим следующие методы, чтобы помочь нам:

Целые числа в JavaScript

Все целочисленные операции (такие как любые виды побитовых манипуляций) следуют одному и тому же шаблону: преобразуйте операнды в числа с плавающей запятой, затем в целые числа; выполнить вычисления; преобразовать целочисленный результат обратно в число с плавающей запятой. Есть четыре целочисленных типа, используемых внутри:

  • Целое число: значение в диапазоне [−2 53 , +2 53 ]. Используется для: большинства целочисленных аргументов (индексы, даты и т. Д.).
  • Uint16: 16-разрядные целые числа без знака в диапазоне [0, 2 16 −1]. Используется для: кодов символов.
  • Uint32: 32-разрядные целые числа без знака в диапазоне [0, 2 32 −1]. Используется для: длины массива.
  • Int32: 32-разрядные целые числа со знаком в диапазоне [−2 31 , 2 31 −1]. Используется для: побитового нет, двоичных побитовых операторов, беззнакового сдвига.

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

Число
n преобразуется в целое число по следующей формуле:

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

Преобразование в целое число может быть реализовано без функции знака следующим образом:

Мы отклоняемся от обычной практики, позволяющей функциям (не являющимся конструкторами) начинаться со строчной буквы, чтобы соответствовать именам, используемым в спецификации ECMAScript 5.1.

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

В качестве первого шага преобразуйте число в целое число. Если это в пределах диапазона Uint32, мы сделали. Если это не так (например, потому что это отрицательно), то мы применяем к нему модуль 2
32 . Обратите внимание, что в отличие от оператора остатка JavaScript в%, результат оператора по модулю имеет знак второго операнда. Следовательно, модуль 2
32 всегда положителен. Интуитивно, каждый добавляет или вычитает 2
32, пока число не окажется в диапазоне [0, 2
32 -1]. Ниже приведена реализация ToUint32.


Операция по модулю становится очевидной при числах, близких к целому числу, кратному 2 32 .

Результат преобразования отрицательного числа имеет больше смысла, если мы посмотрим на его двоичное представление. Чтобы отменить двоичное число, вы инвертируете каждую из его цифр, а затем добавляете одну. Инверсия называется
дополнением к одному, добавление одного превращает его в дополнение к
двум . Иллюстрируя процесс с 4 цифрами:

Последняя строка объясняет, почему дополнение двойки действительно является отрицательным числом, если цифры фиксированы: результат добавления 1 к 1111 равен 0, игнорируя пятую цифру. ToUint32 создает дополнение для 32 битов:

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

Чтобы преобразовать число в Int32, сначала нужно преобразовать его в Uint32. Если установлен его старший бит (если он больше или равен 2 31 ), то 2 32 вычитается, чтобы превратить его в отрицательное число (2 32 равно 4294967295 + 1).

самый простой способ - использовать родной Number функция:

если это не работает для вас, то есть parseInt, унарный плюс, parseFloat с пола и математика.раунд методы.

унарный плюс если ваша строка уже имеет форму целого числа:

если ваша строка является или может быть float, и вы хотите целое число:

или, если вы собираетесь использовать математику.этаж несколько раз:

если вы тот тип, который забывает поставить radix, когда вы вызываете parseInt, вы можете использовать parseFloat и вокруг него, как вам нравится. Здесь я использую пол.

Интересно, Математика.круглый (как математика.floor) будет выполнять преобразование строки в число, поэтому, если вы хотите округлить число (или если у вас есть целое число в строке), это отличный способ, возможно, мой любимый:

попробуйте функцию parseInt:

но есть проблема. Если вы попытаетесь преобразовать " 010 " с помощью функции parseInt, он определит как восьмеричное число и вернет число 8. Итак, вам нужно указать радиус (от 2 до 36). В этом случае база 10.

существует два основных способа преобразования строки в число в javascript. Один из способов-проанализировать его, а другой-изменить его тип на число. Все трюки в других ответах (например, унарный плюс) подразумевают неявное принуждение типа строки к числу. Вы также можете сделать то же самое явно с функцией количество.

извлечение

parseInt и parseFloat-это две функции, используемые для разбора строк на числа. Разбор остановится молча, если он попадет в символ, который он не распознает, что может быть полезно для разбора строк, таких как "92px", но это также несколько опасно, так как это не даст вам никакой ошибки при плохом вводе, вместо этого вы получите NaN, если строка не начинается с числа. Пробелы в начале строки игнорируются. Вот пример того, как он делает что-то отличное от того, что вы хотите, и не дает никаких указаний на то, что что-то пошло неверно:

рекомендуется всегда указывать radix в качестве второго аргумента. В старых браузерах, если строка начиналась с 0, она интерпретировалась бы как восьмеричная, если бы не был указан радикс, который застал многих людей врасплох. Поведение для шестнадцатеричного вызывается тем, что строка начинается с 0x, если не указан радикс, например 0xff . Стандарт фактически изменился с ecmascript 5, поэтому современные браузеры больше не запускают восьмеричный, когда есть ведущий 0 если radix не указан. parseInt понимает радиусы до основания 36, в этом случае как верхние, так и нижние буквы рассматриваются как эквивалентные.

изменение типа строки на число

все другие трюки, упомянутые выше, которые не используют parseInt, включают неявное принуждение строки к числу. Я предпочитаю делать это явно,

это имеет другое поведение для методов анализа (хотя это все еще игнорирует пробелы). Это более строго: если он не понимает всю строку, то возвращает NaN , так что вы не можете использовать его для строк типа 97px . Поскольку вам нужно примитивное число, а не объект-оболочка, убедитесь, что вы не ставите new перед функцией номера.

очевидно, преобразование в число дает вам значение, которое может быть float, а не целым числом, поэтому, если вы хотите целое число, вам нужно его изменить. Есть несколько способов это:

любой побитовый оператор (здесь я сделал побитовое or, но вы также можете сделать двойное отрицание, как в более раннем ответе или bitshift) преобразует значение в 32-битное целое число, и большинство из них преобразуется в целое число со знаком. Обратите внимание, что это не будет хотеть, чтобы вы хотели для больших целых чисел. Если целое число не может быть представлено в 32bits, оно будет обернуто.

чтобы правильно работать с большими числами, вы должны использовать округление методы

имейте в виду, что все эти методы понять экспоненциальную нотацию, так 2e2 и 200 , а не Нана. Кроме того, число понимает "Бесконечность", в то время как методы синтаксического анализа-нет.

таможни

маловероятно, что любой из этих методов делать то, что вы хотите. Например, обычно я хотел бы, чтобы при сбое синтаксического анализа возникла ошибка, и мне не нужна поддержка Бесконечности, экспонент или ведущих пробелов. В зависимости от вашего usecase, иногда имеет смысл написать пользовательскую функцию преобразования.

всегда проверяйте, что вывод числа или одного из методов синтаксического анализа является ожидаемым числом. Вы почти наверняка захотите использовать isNaN чтобы убедиться, что число не NaN (обычно единственный способ узнать, что разбор не удался).

После прочтения текущей статьи вы узнаете, для чего необходимо округлять числа, какие методы и свойства в js выполняют эту функцию, а также чем выделяется деление на 0. Не изменяя своим принципам, я прикреплю примеры к ключевым моментам материала и подробно распишу каждое действие. А теперь давайте приступать к обучению!

Важные заметки о числах

Создаются численные переменные привычным способом:

var numb = 35; // натуральное число

var drob = 0.93; //десятичное представление

var numb16 = 0xFF; //16-ричная система счисления

В современных браузерах появилась поддержка очень интересного метода toLocaleString (), который форматирует все числовые параметры по спецификациям, прописанным в ECMA 402. Благодаря этому большие числа, телефонные номера, валюты и даже проценты красиво выводятся в диалоговом окне.

var num = 714000.80;

alert ( num.toLocaleString ());

Для работы с элементами типа Number был предусмотрен целый глобальный объект с кучей всевозможных математических функций, имя которого Math.

Помимо этого, существуют и другие методы, которые выполняют округление числовых значений до целых чисел, до десятых, сотых и т.д. Рассмотрим их все подробнее.

Великий и могучий Math

Метод math

Глобальный объект Math включает в себя огромное количество разнообразных математических и тригонометрических функций. Это очень нужный объект и часто выручает разработчиков при работе с цифровыми данными.

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

Math.floor ()

Также возможен вариант, когда обработанное число с помощью этой функции осталось прежним. Все потому, что округление осуществляется по нестрогому неравенству ( =).

Как вы уже догадались, в ответе будет число 5.

Math.round ()

Данный метод округляет дробное число до ближайшего целого. Так, если дробная часть находится в диапазоне от 0 и до 0.5 не включительно, то округление происходит к меньшему значению. А если дробная часть находится в диапазоне от включительно 0.5 и до следующего целого числа, то она округляется к большему целому.

Надеюсь, все подумали или сказали правильный ответ – 5.

Еще немного методов

В JavaScript также есть и другие 2 метода, которые занимаются округлением числовых представлений. Однако они несколько отличаются.

Речь пойдет о таких инструментах, как toFixed () и toPrecision (). Они отвечают не просто за округление, а за ее точность до определенных знаков. Давайте покопаем глубже.

toFixed ()

С помощью данного механизма можно указывать, до скольких знаков после запятой нужно округлить значение. Метод возвращает результат в виде строки. Ниже я прикрепил вариант с тремя разными вариантами. Проанализируйте полученные ответы.

var num = 5656.9393;

document.writeln (num.toFixed ()); // 5657

document.writeln (num.toFixed (2)); // 5656.94

document.writeln (num.toFixed (7)); // 5656.9393000

toPrecision ()

Данный метод действует несколько иначе. На месте аргумента можно оставить как пустое место, так и установить параметр. Однако последний будет округлять числа до указанного количества цифр, не обращая внимания на запятую. Вот какие результаты выдала программа, переписанная с прошлого примера:

var num = 5656.9393;

document.writeln (num.toPrecision ()); // 5656.9393

document.writeln (num.toPrecision (2)); // 5.7e+3

document.writeln (num.toPrecision (7)); // 5656.939

Особенность деления на 0 в js

Особенности js

Как известно из уроков по математике, делить на нуль нельзя. Это правило взяли за основу большинство создателей языков программирования. Поэтому при делении на нуль все программы выдают ошибку.

Почему же так? Как известно из тех же математических наук, чем меньше делитель, тем в результате получается большее число. Именно поэтому создатели данного прототипно-ориентированного языка решили отказаться от шаблонов и пойти своим путем.

Для тех, кто впервые сталкивается со значением Infinity, ниже я объяснил его особенности.

Infinity – означает бесконечность и полностью соответствует математическому знаку ∞.

Может быть отрицательной. Также сохраняются все стандартные правила работы с арифметическими операторами.

alert ( 12/ 0 ); // Infinity

alert ( 12.34/ 0 ); // Infinity

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

На этом, пожалуй, и закончу. Если вам понравилась публикация, то обязательно подписывайтесь на мой блог. Не жадничайте ссылкой на интересные статьи и делитесь ими с друзьями. Пока-пока!

Часто результатом расчётов бывает число с большим количеством знаков после запятой. Если это число будет использовано для дальнейших расчётов, то его можно оставить в таком виде. Но иногда требуется округление числа, например для вывода на страницу. В JavaScript округление чисел осуществляется несколькими методами.

Метод Math.round() округляет значение до целого числа.

Округление числа производится по математическим правилам. То есть, если после запятой идёт цифра от 0 до 4, то дробная часть просто отбрасывается. А если после запятой идёт цифра от 5 до 9, то дробрая часть отбрасывается, а к целой части прибавляется единица. пример:

Метод toFixed() округляет число до заданной точности.

точность - количество знаков после запятой, до которого округляется число

Этот метод возвращает не число а строку. Чтобы преобразовать её в число можно добавить + к возвращаемому значению. Пример:

Есть ещё два метода, которые округляют число до целого значения. Метод Math.floor() округляет в меньшую сторону. Он отбрасывает дробную часть числа. А метод Math.ceil() округляет в большую сторону. Он отбрасывает дробную часть, а к целой части прибавляет единицу. Пример:

Случайное число

Метод Math.random() генерирует псевдо-случайное число в диапазоне от 0 до 1. При этом ровно 1 не бывает, число вегда будет меньше.

Обычно случайное число нужно получить в каком-то конкретном диапазоне. Для этого можно использовать формулу:

случайное число = минимум + Math.random() * (максимум - минимум)

Для примера выведем число в диапазоне от -2 до 5:

Конечно, 5 - (-2) это 5+2.

Не завбывайте, что число 5 Вы в этой формуле не получите. Максимальное будет 4.999999999. Полученные значения можно округлить до нужной точности.

Если нужны только целые числа, то полученные значения можно округлять до целого в меньшую сторону. К максимуму нужно прибавить единицу, чтобы этот максимум тоже был возможен. Формула получается такая:

целое число = Math.floor (минимум + Math.random() * (максимум+1 - минимум))

Выведем числа от 10 до 15:

Сравнение дробных чисел

У математических вычислений есть одна особенность - их результат не всегда абсолютно точный. Это проблема не только JavaScript, но и большинства языков программирования. Так происходит потому, что числа и другие данные переводятся в двоичный код, и только потом с ними производятся вычисления.

В большинстве случаев это не приводит к особенным трудностям, просто в результате расчётов иногда получается число с большим количеством знаков после запятой. Но есть ситуация, когда неточность вычислений влияет на работу программы. Это сравнение чисел. Если сравниваются разные числа, то здесь всё будет нормально.

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

Остальные математические методы

Есть достаточно много методов для различных математических вычислений. Они простые и не требуют дополнительных разъяснений. Методы, которые часто используются, перечислены в следующей таблице:

Метод Значение
Math.pow(x, y) Возводит x в степень y
Math.exp(x) Экспонента числа x
Math.sqrt(x) Квадратный корень из числа x
Math.log(x) Натуральный логорифм числа x
Math.abs(x) Модуль числа x
Math.max(a, b, c) Максимальное из чисел
Math.min(a, b, c) Минимальное из чисел
Math.sin(x) Синус числа x
Math.cos(x) Косинус числа x
Math.tan(x) Тангенс числа x

Попробуйте произвести какие-нибудь вычисления с использованием этих методов.

Читайте также: