Преобразовать строку в целое число в JavaScript? - PullRequest
1525 голосов
/ 16 июля 2009

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

Ответы [ 24 ]

14 голосов
/ 13 июня 2015

Чтобы преобразовать строку в целое число, я рекомендую использовать parseFloat и NOT 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 тогда и только тогда, когда вы уверены, что хотите получить целочисленное значение.

14 голосов
/ 27 ноября 2015

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

Example                  Result

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

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

12 голосов
/ 07 июля 2015

мы можем использовать +(stringOfNumber) вместо parseInt(stringOfNumber)

Пример: +("21") возвращает целое число 21, как parseInt("21").

мы можем использовать этот унарный оператор "+" и для разбора float ...

10 голосов
/ 30 октября 2015

Попробуйте str - 0 преобразовать string в number.

> 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

Вот две ссылки для сравнения производительности нескольких способов преобразования строки в int

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

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

9 голосов
/ 30 мая 2017

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

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.

7 голосов
/ 07 ноября 2016

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;
}
6 голосов
/ 27 марта 2017

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

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
1 голос
/ 18 января 2018

Другой вариант - удвоить значение XOR для себя:

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

Будет выведено:

i = 12.34
i ⊕ i ⊕ i = 12
1 голос
/ 30 марта 2017

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

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

 var num1 = "12423";
 typeof num1 => 'number';
 +num1 = > 12423`
0 голосов
/ 06 июня 2019

Вот самое простое решение

let myNumber = "123" | 0;
...