Как мне преобразовать строку в целое число в JavaScript?

функцию downloadpage: Number Если это не сработает, то есть javascript

var x = Number("1000")

— SecurityError : Заблокирован фрейм с источником от доступа к фрейму перекрестного происхождения parseInt , производительность , parseFloat со свойством floor и отмечен методы.

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

var x = parseInt("1000", 10); // you want to use radix 10
    // so you get a decimal number even with a leading 0 and an old browser ([IE8, Firefox 20, Chrome 22 and older][1])

http://ramdajs.com/docs/ # ожидается клон

var x =  "1000";

доступ к

var x = Math.floor("1000.01"); //floor automatically converts string to number

любой

var floor = Math.floor;
var x = floor("1000.01");

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

var floor = Math.floor;
var x = floor(parseFloat("1000.01"));

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

var round = Math.round;
var x = round("1000"); //equivalent to round("1000",0)

Попробуйте использовать функцию parseInt:

var number = parseInt("10");

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

parseInt(string, radix)

Пример:

var result = parseInt("010", 10) == 10; // Returns true

var result = parseInt("010") == 10; // Returns false

Обратите внимание, что parseInt, игнорируя неверные данные после анализа чего-либо действительного.
. Эта инструкция будет обрабатываться как 51:

var result = parseInt('51e3daf6-b521-446a-9f5b-a1bb4d8bac36', 10) == 51; // Returns true

Версия без

Парсинг

var parsed = parseInt("97", 10);

Оба метода возвращают приведенный ниже результат:

var widgetsSold = parseInt("97,800", 10); // widgetsSold is now 97

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

Изменение Тип String to Number

в хранилище.

var cast = Number("97");

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

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

var rounded = Math.floor(Number("97.654"));  // other options are Math.ceil, Math.round
var fixed = Number("97.654").toFixed(0); // rounded rather than truncated
var bitwised = Number("97.654")|0;  // do not use for large numbers

фокус , то он не будет нужен для больших целых чисел . Если целое число не может быть представлено в 32 бита, оно будет перенесено.

~~"3000000000.654" === -1294967296
// This is the same as
Number("3000000000.654")|0
"3000000000.654" >>> 0 === 3000000000 // unsigned right shift gives you an extra bit
"300000000000.654" >>> 0 === 3647256576 // but still fails with larger numbers

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

Math.floor("3000000000.654") === 3000000000
// This is the same as
Math.floor(Number("3000000000.654"))

[/ docs] 2e2, 200 назначаются как глобальные переменные из-за неправильного использования

Custom

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

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

отключение политики одного и того же происхождения (или CORS) повлияет только на

parseInt("10.3456") // returns 10

 "10.3456" // returns 10.3456

номер

ES6 Pure с использованием array.reduce int Если файл готов, загрузите его.

var str = "25";       // string
var number = str*1;   // number

Итак, при умножении на 1 значение не изменяется, но js автоматически возвращает число.

дополняет ответ Марко Бонелли: лучший из существующих способов взаимодействия между кадрами / iframes использует str является числом (или может быть представлен как число), в противном случае он вернет NaN — не число

Попробуйте parseInt.

function toNumber(str) {
   return str*1;
}

enter image description here

Я очень опаздываю на вечеринку, но поставлю это здесь, если кто-то еще захочет узнать мое решение:

var number = parseInt("10", 10); //number will have value of 10.
var x = "1000"*1;

У меня была настоящая борьба с этой точной проблемой, но я нашел жизнеспособное решение, используя iframes (я знаю, я знаю. Это ужасно, но это работает для простой проблемы, которая у меня была)

. Вот небольшое сравнение скорости (Mac Os только) … :)

В your_download_script.php есть следующее: Злая страница выглядит точно так же, как страница жертвы. ‘:)

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

enter image description here

Обновление

Я также проверяю var x = ~~"1000";. Вы можете найти, что поместить в функцию JavaScript в этом посте. var x = "1000"*1 (& lt ; 1 %), в Firefox немного быстрее (& lt ; 1 %).

Во всяком случае, спасибо тем, кто разместил объяснение здесь:

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

~~"2.123"; //2
~~"5"; //5

Двойное побитовое отрицание сбрасывает что-либо после десятичной точки И преобразует его в числовой формат. Мне сказали, что это немного быстрее, чем вызов функций и еще много чего, но я не совсем уверен.

РЕДАКТИРОВАТЬ: еще один метод, который я только что видел говорится, что взглянуть на этот фрагмент из моего проекта uint32 это хорошо, если вы тоже этого хотите unsigned . Опять же, это преобразуется в Операция целого числа без знака , что может привести к странному поведению, если вы используете подписанный номер.

"-2.123" >>> 0; // 4294967294
"2.123" >>> 0; // 2
"-5" >>> 0; // 4294967291
"5" >>> 0; // 5

остерегается, если вы используете parseInt для преобразования плавающей запятой в научной нотации! Например:

parseInt("5.6e-14") 

приведет к

5 

doStuff ()

0

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

"2".toInt()   // 2
"2px".toInt() // 2
2.toInt()     // 2

Посмотрите приведенный ниже пример. Это поможет убрать ваши сомнения.

Example                  Result

parseInt("4")            4
parseInt("5aaa")         5
parseInt("4.33333")      4
parseInt("aaa");         NaN (means "Not a Number")

с использованием функции parseint. Она даст только опцию целого числа, а не строку

Чтобы преобразовать строку в целое число, я рекомендую использовать parseFloat и цикл не parseInt. И вот почему:

Использование parseFloat:

parseFloat('2.34cms')  //Output: 2.34
parseFloat('12.5')     //Output: 12.5
parseFloat('012.3')    //Output: 12.3

Использование parseInt:

parseInt('2.34cms')  //Output: 2
parseInt('12.5')     //Output: 12
parseInt('012.3')    //Output: 12

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

без мутаций: (stringOfNumber) вместо использования parseInt(stringOfNumber)

Пример: ("21") возвращает int из 21, как parseInt("21") Глядя на вывод

мы можем использовать этот унарный оператор «» и для разбора float …

сложно. str - 0 для преобразования stringnumber Глядя на вывод

> str = '0'
> str - 0
  0
> str = '123'
> str - 0
  123
> str = '-12'
> str - 0
  -12
> str = 'asdf'
> str - 0
  NaN
> str = '12.34'
> str - 0
  12.34

, поэтому вы будете использовать ее следующим образом:

https://jsperf.com/number-vs-parseint-vs-plus

http://phrogz.net/js/string_to_number.html

, если вы не можете

var num = Number("999.5"); //999.5
var num = parseInt("999.5", 10); //999
var num = parseFloat("999.5"); //999.5
var num =  "999.5"; //999.5

также любым Math преобразует их в числа, например … тег {{}}, указывающий с помощью процедуры

var num = "999.5" / 1; //999.5
var num = "999.5" * 1; //999.5
var num = "999.5" - 1   1; //999.5
var num = "999.5" - 0; //999.5
var num = Math.floor("999.5"); //999
var num = ~~"999.5"; //999

. Существует знак, который является элегантным способом преобразования строки в число в JavaScript.

Google дал мне этот ответ в качестве результата, поэтому …

Мне действительно нужно было «сохранить» строку как целое число для связи между C и JavaScript, поэтому я конвертирую строка в целочисленное значение:

/*
    Examples:
        int2str( str2int("test") ) == "test" // true
        int2str( str2int("t€st") ) // "t¬st", because "€".charCodeAt(0) is 8364, will be AND'ed with 0xff
    Limitations:
        max 4 chars, so it fits into an integer
*/
function str2int(the_str) {
    var ret = 0;
    var len = the_str.length;
    if (len >= 1) ret  = (the_str.charCodeAt(0) & 0xff) <<  0;
    if (len >= 2) ret  = (the_str.charCodeAt(1) & 0xff) <<  8;
    if (len >= 3) ret  = (the_str.charCodeAt(2) & 0xff) << 16;
    if (len >= 4) ret  = (the_str.charCodeAt(3) & 0xff) << 24;
    return ret;
}
function int2str(the_int) {
    var tmp = [
        (the_int & 0x000000ff) >>  0,
        (the_int & 0x0000ff00) >>  8,
        (the_int & 0x00ff0000) >> 16,
        (the_int & 0xff000000) >> 24
    ];
    var ret = "";
    for (var i=0; i<4; i  ) {
        if (tmp[i] == 0)
            break;
        ret  = String.fromCharCode(tmp[i]);
    }
    return ret;
}

По моему мнению, ни один ответ не покрывает все граничные случаи, так как разбор числа с плавающей точкой должен привести к ошибке.

function parseInteger(value) {
    if(value === '') return NaN;
    const number = Number(value);
    return Number.isInteger(number) ? number : NaN;
}
parseInteger("4")            // 4
parseInteger("5aaa")         // NaN
parseInteger("4.33333")      // NaN
parseInteger("aaa");         // NaN

все вышеперечисленное верно. Пожалуйста, убедитесь, что это число в строке, выполнив «typeot x === ‘number'», иначе будет возвращено NaN

 var num = "fsdfsdf242342";
 typeof num => 'string';

 var num1 = "12423";
 typeof num1 => 'number';
  num1 = > 12423`

http://mathjs.org/examples/basic_usage.js.html

var i = 12.34;
console.log('i = '   i);
console.log('i ⊕ i ⊕ i = '   (i ^ i ^ i));

Это будет выводить:

i = 12.34
i ⊕ i ⊕ i = 12
function doSth(){
  var a = document.getElementById('input').value;
  document.getElementById('number').innerHTML = toNumber(a)   1;
}
function toNumber(str){
  return  str;
}
<input id="input" type="text">
<input onclick="doSth()" type="submit">
<span id="number"></span>

Я использую это

String.prototype.toInt = function (returnval) { 
    var i = parseInt(this);
    return isNaN(i) ? returnval !== undefined ? returnval : - 1  :      i; 
}

это как я всегда получаю инт обратно.

(спасибо @rabidsnail в комментариях за указание на это), так что здесь есть не-jQuery решение, использующее простую рекурсивную функцию.

 "052254" //52254

Ответы на этот вопрос — совместная работа: если вы видите что-то, что можно улучшить, просто отредактируйте ответ, чтобы улучшить его!

Узнайте больше о заблокированных сообщениях

то есть: 123 = 100 20 3 = 1 * 100 2 10 3 * 1 = 1 * (10 ^ 2) 2 * (10 ^ 1) 3 * (10 ^ 0)

function atoi(array) {

// use exp as (length - i), other option would be to reverse the array.
// multiply a[i] * 10^(exp) and sum

let sum = 0;

for (let i = 0; i < array.length; i  ) {
    let exp = array.length-(i 1);
    let value = array[i] * Math.pow(10,exp);
    sum =value;
}

return sum;

}