Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在JavaScript中将字符串转换为整数?_Javascript_String_Integer_Data Conversion - Fatal编程技术网

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

如何在JavaScript中将字符串转换为整数?,javascript,string,integer,data-conversion,Javascript,String,Integer,Data Conversion,如何在JavaScript中将字符串转换为整数?试试parseInt var number = parseInt("10", 10); //number will have value of 10. 尝试parseInt函数: var number = parseInt("10"); var x = Number("1000") 但有一个问题。若您尝试使用parseInt函数转换010,它将检测为八进制数,并返回数字8。因此,您需要指定一个从2到36的基数。在这种情况下,基数为10 par

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

试试parseInt

var number = parseInt("10", 10); //number will have value of 10.
尝试parseInt函数:

var number = parseInt("10");
var x = Number("1000")
但有一个问题。若您尝试使用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

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

var number = parseInt("10");
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
如果您的字符串是或可能是浮点,并且您想要一个整数:

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)

另请注意:Mootools具有用于任何本机字符串、浮点或整数的函数toInt

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

如果使用parseInt转换科学记数法中的浮点,请小心! 例如:

parseInt("5.6e-14") 
var personAge = '24';
var personAge1 = (+personAge)
将导致

5 
而不是

0

ParseInt和+是不同的

parseInt("10.3456") // returns 10

+"10.3456" // returns 10.3456

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

这是个老问题,但我喜欢这个把戏:

~~"2.123"; //2
~~"5"; //5
双位负数去掉小数点后的任何内容,并将其转换为数字格式。有人告诉我,它比调用函数之类的稍快一点,但我并不完全相信

编辑:另一种方法我刚才看到了一个关于javascript>>>操作符的问题,这是一个零填充右移,它显示了用这个操作符将一个数字移位0会将该数字转换为uint32,如果您还希望它不带符号,这很好。同样,这会转换为无符号整数,如果使用有符号的数字,可能会导致奇怪的行为

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

在javascript中,有两种将字符串转换为数字的主要方法。一种方法是解析它,另一种方法是将其类型更改为数字。其他答案(如一元加号)中的所有技巧都涉及隐式地将字符串类型强制为数字。您还可以使用Number函数显式执行相同的操作

解析

parseInt和parseFloat是用于将字符串解析为数字的两个函数。如果遇到无法识别的字符,解析将自动停止,这对解析92px之类的字符串很有用,但也有点危险,因为它不会在输入错误时给您任何错误,除非字符串以数字开头,否则您将返回NaN。忽略字符串开头的空白。下面是一个例子,它做了一些与您想要的不同的事情,并且没有给出任何出错的迹象:

var widgetsSold = parseInt("97,800", 10); // widgetsSold is now 97
最好总是将基数指定为第二个参数。在较旧的浏览器中,如果字符串以0开头,如果没有指定基数,它将被解释为八进制,这让很多人感到惊讶。如果未指定基数(例如0xff),则通过将字符串以0x开头来触发十六进制的行为。ecmascript 5实际上改变了标准,因此,如果没有指定基数,则当前导0时,现代浏览器不再触发八进制。parseInt理解底36的半径,在这种情况下,大写字母和小写字母都被视为等效字母

将字符串类型更改为数字

上面提到的所有其他不使用parseInt的技巧都涉及隐式地将字符串强制转换为数字。我更愿意明确地这样做

var cast = Number("97");
这与解析方法的行为不同,尽管它仍然忽略空格。它更严格:如果它不理解整个字符串,则返回NaN,因此不能将其用于97px之类的字符串。因为您想要的是一个原语数字而不是数字包装器对象,所以请确保不要将new放在number函数前面

显然,转换为数字会得到一个可能是浮点值而不是整数的值,因此如果需要整数,则需要对其进行修改。有几种方法可以做到这一点:

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位整数,其中大多数将转换为带符号整数。请注意,对于大整数,这不是您想要的。如果整数不能用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"))
请记住,科埃西翁理解指数 al表示法和无穷大,因此2e2是200而不是NaN,而解析方法不是

习俗

这两种方法都不可能完全满足您的需求。例如,通常我希望在解析失败时抛出一个错误,并且我不需要支持无穷大、指数或前导空格。根据您的用例,有时编写自定义转换函数是有意义的


始终检查Number或其中一个解析方法的输出是否为您期望的数字。您几乎肯定会希望使用isNaN来确保数字不是NaN,这通常是发现解析失败的唯一方法。

虽然是一个老问题,但这可能会对某些人有所帮助

我使用这种方法将字符串转换为整数

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

但是如下所示,如果您确定str是一个数字,或者可以表示为一个数字,那么就应该使用这个选项,否则它将返回NaN,而不是一个数字

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

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

要将字符串转换为整数,我建议使用parseFloat而不是parseInt。原因如下:

使用parseFloat:

使用parseInt:

因此,如果您注意到parseInt会丢弃小数后的值,而parseFloat允许您处理浮点数,因此,如果您希望保留小数后的值,则更合适。当且仅当您确定需要整数值时才使用parseInt。

我们可以使用+stringOfNumber而不是使用parseIntstringOfNumber

例如:+21返回的int值为21,与parseInt21类似

我们也可以使用这个一元+运算符来解析float…

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

这里有两个链接来比较将字符串转换为int的几种方法的性能


请看下面的例子。这将有助于澄清您的疑问

Example                  Result

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

通过使用parseint函数,它只给出当前整数的op,而不是字符串

谷歌给了我这个答案,所以

实际上,我需要将字符串保存为整数,用于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;
}

在我看来,没有答案涵盖所有边缘情况,因为解析浮点应该会导致错误

函数parseIntegervalue{ ifvalue==返回NaN; const number=Numbervalue; 返回编号。isIntegernumber?编号:NaN; } parseInteger4//4 parseInteger5aaa//NaN parseInteger4.33333//NaN parseintegraaa;//楠 最快的 测验 这里只比较一下Mac Os的速度…:


对于chrome'plus'和'mul'最快>700000,00 op/sec,'Math.floor'最慢。对于Firefox来说,“plus”是最慢的mul'最快速度>900000000 op/sec。在Safari中,“parseInt”是fastes,“number”是最慢的,但是结果非常相似,>13000000以上所有的都是正确的。在确认这是字符串中的数字之前,请先执行typeot x==='number',否则它将返回NaN

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

 var num1 = "12423";
 typeof num1 => 'number';
 +num1 = > 12423`
功能剂量{ var a=document.getElementById'input'。值; document.getElementById'number'.innerHTML=toNumbera+1; } 函数toNumberstr{ return+str; }
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中将字符串转换为数字的优雅方法。

另一个选项是将值本身加倍或异或:

var i=12.34; console.log'i='+i; 控制台,日志⊕ 我⊕ i='+i^i^i; 这将输出:

i=12.34 我⊕ 我⊕ i=12 我用这个

String.prototype.toInt = function (returnval) { 
    var i = parseInt(this);
    return isNaN(i) ? returnval !== undefined ? returnval : - 1  :      i; 
}
这样,我总是能得到一个整数。

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


希望有帮助

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

i、 e: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;
}以下是最简单的解决方案

更简单的解决方案


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

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

// Example 1 - Invalid value:
let value = null;
let integer = (parseInt(value, 10) || 0);
// => integer = 0
你可以使用plus。 例如:

parseInt("5.6e-14") 
var personAge = '24';
var personAge1 = (+personAge)

然后您可以通过TypeOfPersonage1查看新变量的类型;这可能不是解析整数的最佳解决方案,但如果需要提取整数,例如:

parseInt("5.6e-14") 
var personAge = '24';
var personAge1 = (+personAge)
1a2b3c==123 198一些文本2你好,世界!30 === 198230 // ... 这仅适用于整数:

变量str='3a9b0c3d2e9f8g' 函数提取器INTEGERSTR{ var结果=0; 风险系数=1 对于变量i=str.length;i>0;i-{ if!isNaNstr[i-1]{ 结果+=parseIntstr[i-1]*因子 系数*=10 } } 返回结果 }
在Javascript中,您可以执行以下操作:-

帕森特

parseInt("10.5") //returns 10
乘以1

var s = "10";
s = s*1;  //returns 10
使用一元运算符+

var s = "10";
s = +s;  //returns 10
使用位运算符

var s= "10.5";
s = ~~s; //returns 10
使用 Math.floor或Math.ceil

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


第三个示例导致语法错误,您应该使用双点,例如:2..toInt;第一个点将结束数字文本的表示,第二个点是属性访问器。这个问题不是关于mootools,而是关于JavaScript。对于浮点,使用parseInt是不正确的。parseFloat在这种情况下工作正常。这是一个值得关注的问题-即使parseInt2e2是一个整数,如果parseInt理解指数表示法,它也将是200,但实际上返回2,因为它不理解。@kybernetikos-IMHO期望parseInt理解浮点表示法是不合理的。更适合解析float或Number,然后根据需要舍入或截断为int。这是一份更明确的意向声明,hy@jedierikb我正在编辑jsperf链接。添加'4'>>0和'4'>>0.2015更新:从ECMAScript 5开始,前导为0的字符串也会获得默认基数10,而不是8。仅在较旧的浏览器中需要显式指定基数10。注意,数字成功返回0,即使大多数人不会考虑空字符串来表示有效的数字。PARSETIN’3Q’成功返回3,尽管大多数人不会认为“3Q”是一个有效的数字。parseInt和parseFloat都愉快地接受字母。只有Number始终返回NaN。在我看来,解析一个整数时,对于不完全是整数的每个值,都会产生异常/NaN。因此,这些都不能作为数字“2.2”强制为2,数字强制为0。这取决于您是否希望您的代码也接受97,8,00和类似值。一个简单的技巧是执行.replace/[^0-9]/g,它将从字符串中删除所有非数字,然后再进行转换。这当然会忽略所有可能会出错的疯狂字符串,而不仅仅是解析…@kybernetikos应该是。替换/[^0-9.]/g,否则1.05将变为105。完全正确,尽管我不会在重要的代码中使用类似的东西,但有很多方法可以让某些东西通过,而您确实不想让它们通过。我发现在代码中使用数字更容易阅读,所以感谢您指出它是一种解决方案。@kybernetikos in var fixed=Number97.654.toFixed0;//取整而不是截断,我们得到一个字符串是因为.toFixed方法而不是整数。如果我们想要四舍五入的整数,最好只使用Math.round97.654;问题是如何在JavaScription中将字符串转换为整数,但不能在公式中使用它!即1+21*10==1210@AlexanderVasilyev我想你可以,你能不能在+?@NiCkNewman的旁边加一个括号,我从我们评论的答案中得到+21。我真的不喜欢这个解决方案。它不像parseInt那样显式。一个常见的实现是const myNumber=+mynumberastring,乍一看它就像一个标准的+=或=+运算符。此外,如果使用不当,可能会导致连接错误。这个解决方案基于这样一个事实,即当没有提供数字时,0被假定为左侧。我同意@Stormmuler。如果出于某种原因,编码人员希望比parseInt更简洁,多使用一个字符可以使其更清晰:0+。。。。这使得人们更容易不误解结果,但这仍然需要一些思考。所以还是有味道。干净的编码表达了您的意思:使用parseInt。2016年不再需要基数。对于较新的浏览器,可能不需要基数,但为了向后兼容,仍然需要基数。或者'02或02+1,或者03,12或03.12如何?请注意,这会忽略数字后面的错误数据。例如,parseInt'0asdf',10生成0。这是一种存储和检索4字节值的有趣方法。它没有回答这个问题的传统解释:如何将数字的字符串表示形式转换为整数值。无论如何,如果一个字节为0,则int2str函数将停止,这可能是值中的合法元素,因此应删除if…break,以便返回一个完整的4字节值。不返回数字对浮点来说有点激进,不是吗?它是parseInteger,而不是parseNumber。我想每个解决方案都是一个解决方案,因为JS不支持整数和浮点数作为单独的类型。如果不是一个误导性的数字,我们可以返回null而不是NaN。@AlexanderYau,根据这一点,“1”将通过ToNumber转换为1,那么1-0将是节点v8.5.0中的1,var num1=12423;num1的类型;返回字符串。如果您的目标是避免NaN,那么简单的解决方案是测试您为NaN返回的值:var v=您喜欢的任何转换;如果isNaNv…处理错误。。。否则…使用v…此页底部有一个很好的表格,比较了各种转换方法:在OP没有澄清的情况下,这个问题可以解释为将任何字符串转换为数字,即将dog转换为一个数字,当然可以
n完了。上钩:@DanielCarrera。。然而,这里没有人这样解释这个问题。可能是因为如果这是目标的话,很可能措辞会完全不同。毕竟,这样做的过程不是,也从来没有被称为转换为整数 456 789,12在fr中,测试A、B、E和F的结果没有显著差异-它们基本上是一样的,我在Chrome上快了~~ 1000,但它们都非常接近。。。本质上是数字…但是,请注意数字支持一些特殊格式,parseInt将错误地解释这些格式。例如,Number0x11=>17,则parseInt将返回0。若目标是拒绝所有非整数,那个么搜索非数字可能更好。或者可以做var f=Numberstr;返回f.isInteger?f:南,;具体取决于你想允许/拒绝什么。请你解释一下这个例子中的+是什么,以及演员是如何进行的?@Alex Oh yeah。很抱歉谢谢你指出这一点
var s = "10";
s = s*1;  //returns 10
var s = "10";
s = +s;  //returns 10
var s= "10.5";
s = ~~s; //returns 10
var s = "10";
s = Math.floor(s) || Math.ceil(s); //returns 10