如何在JavaScript中将字符串转换为整数?


当前回答

在JavaScript中,您可以执行以下操作:

解析Int

parseInt("10.5") // Returns 10

与1相乘

var s = "10";
s = s*1;  // Returns 10

使用一元运算符(+)

var s = "10";
s = +s;  // Returns 10

使用按位运算符

(注:在2140000000之后开始破裂。示例:~~“2150000000”=-214967296)

var s = "10.5";
s = ~~s; // Returns 10

使用Math.floor()或Math.ceil()

var s = "10";
s = Math.floor(s) || Math.ceil(s); // Returns 10

其他回答

尝试str-0将字符串转换为数字。

> 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

尝试parseInt函数:

var number = parseInt("10");

但有一个问题。如果您尝试使用parseInt函数转换“010”,它将检测为八进制数,并将返回数字8。因此,需要指定基数(从2到36)。在这种情况下,底座10。

parseInt(string, radix)

例子:

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

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

请注意,parseInt在解析任何有效数据后忽略错误数据。此guid将解析为51:

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

将数字的乘法与各自的十次幂相加:

即:123=100+20+3=1100+2+10+31=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;
}

确保获得有效整数的最安全方法:

let integer = (parseInt(value, 10) || 0);

示例:

// Example 1 - Invalid value:
let value = null;
let integer = (parseInt(value, 10) || 0);
// => integer = 0
// Example 2 - Valid value:
let value = "1230.42";
let integer = (parseInt(value, 10) || 0);
// => integer = 1230
// Example 3 - Invalid value:
let value = () => { return 412 };
let integer = (parseInt(value, 10) || 0);
// => integer = 0

最简单的方法是使用本机Number函数:

var x = Number("1000")

如果这对你不起作用,那么有parseInt、一元加号、parseFloat with floor和Math.round方法。

parseInt()

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])

一元加

如果字符串已经是整数形式:

var x = +"1000";

地板()

如果字符串是或可能是浮点数,并且需要整数:

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

或者,如果您要多次使用Math.floor:

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

parseFloat()

如果你是一个在调用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)