将字符串转换为整数?

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

ItachiGreen2020/03/09 20:17:31

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

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
古一LEY2020/03/09 20:17:31
function parseIntSmarter(str) {
    // ParseInt is bad because it returns 22 for "22thisendsintext"
    // Number() is returns NaN if it ends in non-numbers, but it returns 0 for empty or whitespace strings.
    return isNaN(Number(str)) ? NaN : parseInt(str, 10);
}
泡芙Green2020/03/09 20:17:31

我用这个

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

这样,我总是能得到一个整数。

路易Tom2020/03/09 20:17:30

我只在字符串之前添加了一个加号(+),这就是解决方案!

+"052254" //52254

希望能帮助到你 ;)

达蒙LEY2020/03/09 20:17:30

用十的幂相加数字的乘法:

即: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;

}

TomEva2020/03/09 20:17:30

这是最简单的解决方案

let myNumber = "123" | 0;

更简单的解决方案

let myNumber = +"123";
Gil米亚2020/03/09 20:17:30

我认为,没有答案能涵盖所有极端情况,因为解析浮点数会导致错误。

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
LEYJim2020/03/09 20:17:30

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

此外,任何数学运算都会将它们转换为数字,例如...

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中将字符串转换为数字的一种优雅方式。

阿飞宝儿猴子2020/03/09 20:17:30

请看下面的例子,它将帮助您消除疑惑

Example                  Result

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

通过使用parseint函数,它将只给出存在整数的op,而不给出字符串

做个有心人2020/03/09 20:17:30

我们可以使用+(stringOfNumber)而不是使用parseInt(stringOfNumber)

例如:+("21")返回int,如parseInt("21")

我们也可以使用该一元“ +”运算符来解析float。

斯丁Tony泡芙2020/03/09 20:17:30

另请注意:Mootools具有toInt()函数,该函数可用于任何本机字符串(或float(或整数))。

"2".toInt()   // 2
"2px".toInt() // 2
2.toInt()     // 2
达蒙武藏2020/03/09 20:17:30

请注意,如果您使用parseInt转换科学计数形式的浮点数!例如:

parseInt("5.6e-14") 

将导致

5 

代替

0
米亚Eva2020/03/09 20:17:30

我在这里发布了错误的答案,对不起。固定。

这是一个老问题,但是我喜欢这个技巧:

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

双按位负数会在小数点后删除所有内容,并将其转换为数字格式。有人告诉我它比调用函数之类的要快一些,但是我并不完全相信。

编辑:我刚刚在这里看到的另一种方法(有关javascript >>>运算符的问题,这是一个零填充右移),它表明使用此运算符将数字移位0会将数字转换为uint32,如果您也希望它没有签名同样,这将转换为无符号整数,如果您使用带符号数字,则可能导致奇怪的行为。

"-2.123" >>> 0; // 4294967294
"2.123" >>> 0; // 2
"-5" >>> 0; // 4294967291
"5" >>> 0; // 5
神无LEYTony2020/03/09 20:17:30

尝试parseInt。

var number = parseInt("10", 10); //number will have value of 10.
前端小胖JinJin2020/03/09 20:17:30

尽管这是一个古老的问题,但这可能对某人有所帮助。

我用转换字符串的这种方式INT

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

因此,当乘以1时,值不会更改,但是js自动返回一个数字。

但是,如下所示,如果您确定stra是数字(或可以表示为数字),则应使用此方法,否则它将返回NaN-不是数字。

您可以创建简单的函数来使用,例如

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

在此处输入图片说明

逆天2020/03/09 20:17:30

ParseInt()和+不同

parseInt("10.3456") // returns 10

+"10.3456" // returns 10.3456
JinJin达蒙2020/03/09 20:17:30

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

var x = Number("1000")

如果这对您不起作用,则有parseInt一元加号带有floor的parseFloatMath.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");

如果您是在调用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)