Как мне преобразовать строку в целое число в JavaScript?
javascript
string
integer
data-conversion
cubuspl42
источник
источник
Ответы:
Самый простой способ - использовать встроенную
Number
функцию:Если это не работает для вас, то есть методы parseInt , unary plus , parseFloat with floor и Math.round .
ParseInt:
унарный плюс, если ваша строка уже в форме целого числа:
если ваша строка является или может быть плавающей точкой, и вы хотите целое число:
или, если вы собираетесь использовать Math.floor несколько раз:
Если вы тот тип, который забывает вводить основание при вызове parseInt, вы можете использовать parseFloat и округлить его так, как вам нравится. Здесь я использую пол.
Интересно, что Math.round (например, Math.floor) будет выполнять преобразование строки в число, поэтому, если вы хотите, чтобы число округлялось (или если в строке было целое число), это отличный способ, может быть, мой любимый:
источник
'4'>>0
и'4'>>>0
.parseInt
и сparseFloat
удовольствием принимают письма. ТолькоNumber
возвращаетсяNaN
последовательно.NaN
для каждого значения, которое не является целым числом. Поэтому нет ни один из них не работает , какNumber('2.2')
принуждают к2
иNumber('')
принуждать к 0.Попробуйте функцию parseInt:
Но существует проблема. Если вы попытаетесь преобразовать «010» с помощью функции parseInt, она обнаружит восьмеричное число и вернет число 8. Итак, вам нужно указать основание (от 2 до 36). В этом случае база 10.
Пример:
Обратите внимание, что
parseInt
игнорирует неверные данные после анализа чего-либо действительного.Этот гид будет разобрать как
источник
parseInt('0asdf', 10)
производит0
.Есть два основных способа преобразовать строку в число в JavaScript. Одним из способов является его разбор, а другим способом - изменить его тип на Number. Все приемы в других ответах (например, унарный плюс) включают в себя неявное приведение типа строки к числу. Вы также можете сделать то же самое явно с помощью функции Number.
анализ
parseInt и parseFloat - две функции, используемые для разбора строк на числа. Синтаксический анализ прекратится тихо, если он попадет в символ, который он не распознает, что может быть полезно для анализа строк, таких как «92px», но это также несколько опасно, поскольку при неправильном вводе вы не получите никакой ошибки, вместо этого вы вернусь NaN, если строка не начинается с числа. Пробелы в начале строки игнорируются. Вот пример того, как он делает что-то отличное от того, что вы хотите, и не указывает, что что-то пошло не так:
Рекомендуется всегда указывать основание в качестве второго аргумента. В старых браузерах, если строка начиналась с 0, она была бы интерпретирована как восьмеричная, если бы не был указан radix, что застало многих врасплох. Поведение для шестнадцатеричного запускается, если строка начинается с 0x, если не указан radix, например
0xff
. Стандарт на самом деле изменился с ecmascript 5, поэтому современные браузеры больше не запускают восьмеричный код, когда идет начальный 0, если не задано основание. parseInt понимает основание вплоть до основания 36, и в этом случае как заглавные, так и строчные буквы рассматриваются как эквивалентные.Изменение типа строки на число
Все другие трюки, упомянутые выше, которые не используют parseInt, включают неявное приведение строки в число. Я предпочитаю делать это явно,
Это поведение отличается от методов синтаксического анализа (хотя оно по-прежнему игнорирует пробелы). Это более строгое: если он не понимает всю строку, чем возвращает
NaN
, то вы не можете использовать его для строк вроде97px
. Поскольку вам нужен простой номер, а не объект-обертка Number, убедитесь, что вы не ставитеnew
перед функцией Number.Очевидно, что преобразование в Number дает вам значение, которое может быть числом с плавающей точкой, а не целым числом, поэтому, если вам нужно целое число, вам нужно изменить его. Есть несколько способов сделать это:
Любой побитовый оператор (здесь я сделал побитовый или, но вы также можете сделать двойное отрицание, как в предыдущем ответе или сдвиге) преобразует значение в 32-битное целое число, и большинство из них преобразуется в целое число со знаком. Обратите внимание, что это не будет хотеть вы хотите для больших целых чисел . Если целое число не может быть представлено в 32 битах, оно будет перенесено.
Чтобы правильно работать с большими числами, вы должны использовать методы округления
Имейте в виду , что все эти методы понимают экспоненциальную нотацию, так
2e2
это ,200
а не NaN. Кроме того, Number понимает «Бесконечность», а методы разбора - нет.изготовленный на заказ
Маловероятно, что любой из этих методов делает именно то, что вы хотите. Например, обычно я хотел бы выдать ошибку, если синтаксический анализ завершился неудачно, и мне не нужна поддержка бесконечности, экспонент или начальных пробелов. В зависимости от вашего варианта использования иногда имеет смысл написать пользовательскую функцию преобразования.
Всегда проверяйте, что выходные данные Number или одного из методов разбора соответствуют ожидаемому числу. Вы почти наверняка захотите использовать,
isNaN
чтобы убедиться, что число не является NaN (обычно это единственный способ узнать, что анализ не выполнен).источник
97,8,00
и был похож или нет. Простой трюк состоит в том,.replace(/[^0-9]/g, "")
чтобы удалить из вашей строки все нецифровые символы, а затем выполнить преобразование. Это, конечно, будет игнорировать все виды сумасшедших строк, в которых вы, вероятно, должны.replace(/[^0-9.]/g, "")
, иначе «1,05» станет «105».var fixed = Number("97.654").toFixed(0); // rounded rather than truncated
, мы получаемstring
(из-за.toFixed
метода) вместоnumber
(целое число). Если мы хотим округленное целое число, то, вероятно, лучше просто использоватьMath.round("97.654");
ParseInt () и + разные
источник
Самый быстрый
Тестовое задание
Вот небольшое сравнение скорости (только Mac OS) ... :)
Для chrome «плюс» и «мул» самые быстрые (> 700 000,00 операций в секунду), «Math.floor» самый медленный. Для Firefox «плюс» - самый медленный (!), «Мул» - самый быстрый (> 900 000 000 операций в секунду). В Safari «parseInt» - это посты, «номер» - самый медленный (но результаты очень похожи,> 13 000 000 <31 000 000). Поэтому Safari для приведения строки к int более чем в 10 раз медленнее, чем другие браузеры. Таким образом, победитель ' муль ' :)
Вы можете запустить его в своем браузере по этой ссылке https://jsperf.com/js-cast-str-to-number/1
Обновить
Я также тестирую
var x = ~~"1000";
- на Chrome и Safari немного медленнее, чемvar x = "1000"*1
(<1%), на Firefox немного быстрее (<1%). Я обновляю картинку выше и тестируюисточник
Хотя старый вопрос, но, возможно, это может быть полезно для кого-то.
Я использую этот способ преобразования строки в
целоечислоТаким образом, при умножении на 1 значение не изменяется, но js автоматически возвращает число.
Но, как показано ниже, это следует использовать, если вы уверены, что
str
это число (или может быть представлено как число), в противном случае он вернет NaN, а не число.Вы можете создать простую функцию для использования, например,
источник
Попробуйте parseInt.
источник
Я написал неправильный ответ здесь, извините. фиксированный.
Это старый вопрос, но я люблю этот трюк:
Двойной побитовый минус отбрасывает что-либо после десятичной точки И преобразует его в числовой формат. Мне сказали, что это немного быстрее, чем вызов функций и еще много чего, но я не совсем уверен.
РЕДАКТИРОВАТЬ: еще один метод, который я только что видел здесь (вопрос об операторе javascript >>>, который является сдвиг вправо с нулевым заполнением), который показывает, что смещение числа на 0 с помощью этого оператора преобразует число в uint32, что хорошо, если вы также хочу это без знака . Опять же, это преобразуется в целое число без знака , что может привести к странному поведению, если вы используете число со знаком.
источник
Осторожно, если вы используете parseInt для преобразования числа с плавающей точкой в научную запись! Например:
приведет к
вместо
источник
parseInt
не будет работать правильно для поплавка.parseFloat
работает правильно в этом случае.Чтобы преобразовать строку в целое число, я рекомендую использовать parseFloat и НЕ parseInt. Вот почему:
Использование parseFloat:
Использование parseInt:
Так что, если вы заметили, parseInt отбрасывает значения после десятичных чисел, тогда как parseFloat позволяет работать с числами с плавающей запятой и, следовательно, более подходит, если вы хотите сохранить значения после десятичных дробей. Используйте parseInt тогда и только тогда, когда вы уверены, что хотите получить целочисленное значение.
источник
Также как примечание: Mootools имеет функцию toInt (), которая используется для любой нативной строки (или float (или integer)).
источник
SyntaxError
, вы должны использовать двойную точку, например:2..toInt();
первая точка заканчивает представлениеNumber
литерала, а вторая точка является средством доступа к свойству.Пожалуйста, смотрите ниже пример. Это поможет очистить ваши сомнения
с помощью функции parseint. Она выдаст только целое число, а не строку
источник
мы можем использовать
+(stringOfNumber)
вместо того, чтобы использоватьparseInt(stringOfNumber)
Пример:
+("21")
возвращает int 21 какparseInt("21")
.мы можем использовать этот унарный оператор "+" для разбора float ...
источник
+
?parseInt
есть. Обычная реализацияconst myNumber = +myNumberAsAString
выглядит на первый взгляд как стандарт+=
или=+
оператор. Также при неправильном использовании это может привести к ошибкам конкатенации. Это решение основано на том факте, что 0 считается левой стороной, когда число не указано.Попробуйте
str - 0
конвертироватьstring
вnumber
.Вот две ссылки для сравнения производительности нескольких способов преобразования строки в int
https://jsperf.com/number-vs-parseint-vs-plus
http://phrogz.net/js/string_to_number.html
источник
'1'
будет преобразован1
путемToNumber
, то1 - 0
будет1
В JavaScript есть много способов преобразовать строку в числовое значение ... Все просто и удобно, выберите способ, который вам подходит:
Также любая математическая операция конвертирует их в число, например ...
Я предпочитаю использовать
+
знак, который является элегантным способом преобразования строки в число в JavaScript.источник
Google дал мне этот ответ как результат, так что ...
На самом деле мне нужно было «сохранить» строку как целое число для связи между C и JavaScript, поэтому я преобразовал строку в целочисленное значение:
источник
int2str
функция останавливается, если байт равен 0, что может быть допустимым элементом в значении, поэтомуif
...break
следует удалить, чтобы получить полное возвращенное 4-байтовое значение.На мой взгляд, ни один ответ не покрывает все граничные случаи, так как анализ float должен привести к ошибке.
источник
parseInteger
не такparseNumber
. Я думаю, что каждое решение - это обходной путь, так как JS не поддерживает целые числа и с плавающей точкой как отдельные типы. Мы могли бы вернутьсяnull
вместоNaN
, если не номер вводит в заблуждение.Вот самое простое решение
Более простое решение
источник
все вышеперечисленное верно. Пожалуйста, убедитесь, что это число в строке, выполнив "typeot x === 'number'", иначе он вернет NaN
источник
var num1 = "12423"; typeof num1;
возвращаетсяstring
.Другой вариант - удвоить значение XOR для себя:
Это выведет:
источник
Я добавил только один плюс (+) перед строкой, и это было решением!
Надеюсь, поможет ;)
источник
Суммируя умножение цифр с соответствующей степенью десяти:
т.е.: 123 = 100 + 20 + 3 = 1 * 100 + 2 + 10 + 3 * 1 = 1 * (10 ^ 2) + 2 * (10 ^ 1) + 3 * (10 ^ 0)
}
источник
источник
Я использую это
таким образом я всегда получаю инт обратно.
источник
Самый безопасный способ убедиться, что вы получите действительное целое число:
Примеры:
источник
источник
Вы можете использовать плюс, например =>
var personAge = '24'; var personAge1 = (+ personAge)
тогда вы можете увидеть typeof personAge это число
источник