javascript - 字符串转数字python - 字符串转数字算法
如何在JavaScript中将字符串转换为整数? (14)
如何在JavaScript中将string
转换为integer
?
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;
}
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中将字符串转换为数字的优雅方式。
以上所有内容均正确。 请确定之前,这是一个字符串中的数字,通过做“typeot x ==='number'”其他智慧将返回NaN
var num = "fsdfsdf242342";
typeof num => 'string';
var num1 = "12423";
typeof num1 => 'number';
+num1 = > 12423`
另一种选择是将XOR值与其自身进行XOR:
var i = 12.34;
console.log('i = ' + i);
console.log('i ⊕ i ⊕ i = ' + (i ^ i ^ i));
这将输出:
i = 12.34
i ⊕ i ⊕ i = 12
在我看来,没有答案涵盖了所有的边界情况,因为解析float应该导致错误。
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
尝试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的几种方法的性能
当心,如果您使用parseInt以科学记数法转换浮点数! 例如:
parseInt("5.6e-14")
会导致
5
代替
0
我们可以使用+(stringOfNumber)
而不是使用parseInt(stringOfNumber)
例如: +("21")
像parseInt("21")
一样返回21的int。
我们也可以使用这个一元“+”运算符来解析float ...
我建议在parseInt上使用parseFloat。 原因如下:
使用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。
最简单的方法是使用本机Number
函数:
var x = Number("1000")
如果这不适合你,那么就有parseInt , unary plus , parseFloat和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");
如果您是在调用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)
虽然这是一个老问题,但也许这可能对某人有所帮助。
我使用这种将字符串转换为int数字的方式
var str = "25"; // string
var number = str*1; // number
所以,当乘以1时,该值不会改变,但js会自动返回一个数字。
但是,如下所示,如果您确定str
是一个数字(或者可以表示为数字),则应该使用它,否则它将返回NaN - 不是数字。
你可以创建简单的函数来使用,例如
function toNumber(str) {
return str*1;
}
试试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
这里是速度的一点比较(仅限Mac Os)... :)
对于chrome'plus'和'mul'最快,'Math.floor'最慢(> 700,000,00 op / sec)。 对于Firefox'加'最慢(!)'mul'最快(> 900,000,000 op / sec)。 在Safari'parseInt'是fastes,'数字'是最慢的(但是结果非常相似,> 13,000,000 <31,000,000)。 因此,将字符串转换为int的Safari比其他浏览器慢10倍以上。 所以赢家是' mul ':)
您可以通过此链接https://jsperf.com/casttonumber在浏览器上运行它
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>