如何在JavaScript中将字符串转换为整数?
我实际上需要将一个字符串“保存”为整数,用于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:
maximum 4 characters, 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;
}
int2str
函数会停止,如果一个字节是0,这可能是值中的合法元素,因此应该删除 if
...break
以便返回完整的4字节值。 - Suncat2000function 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);
}
Number
支持一些特殊格式,这些格式 parseInt
会错误地解释。例如,Number("0x11")
=> 17
,然后 parseInt
将返回 0
。如果目标是拒绝所有非整数,则最好搜索非数字。或者可以执行 var f = Number(str); return f.isInteger() ? f : NaN;
根据您想要允许/拒绝的内容来决定。 - ToolmakerSteve确保获取有效整数的最安全方法:
最初的回答:
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(" 200.12 ") // Returns 200.12
Number("200.12") // Returns 200.12
Number("200") // Returns 200
parseInt(" 200.12 ") // Return 200
parseInt("200.12") // Return 200
parseInt("200") // Return 200
parseInt("Text information") // Returns NaN
这个函数会返回第一个数字。
parseFloat("200 400") // Returns 200
parseFloat("200") // Returns 200
parseFloat("Text information") // Returns NaN
parseFloat("200.10") // Return 200.10
将一个数字向下取整到最接近的整数
Math.floor(" 200.12 ") // Return 200
Math.floor("200.12") // Return 200
Math.floor("200") // Return 200
var personAge = '24';
var personAge1 = (+personAge)
然后,您可以通过typeof personAge1
查看新变量的类型; 它是 number
类型。
将数字乘以相应的十的幂次方后相加:
例如: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;
}
另一种选项是将值与自身进行双重异或:
var i = 12.34;
console.log('i = ' + i);
console.log('i ⊕ i ⊕ i = ' + (i ^ i ^ i));
这将输出:
i = 12.34
i ⊕ i ⊕ i = 12
+"052254" // 52254
我使用这个
String.prototype.toInt = function (returnval) {
var i = parseInt(this);
return isNaN(i) ? returnval !== undefined ? returnval : - 1 : i;
}
var str = "7";
var num = str.toInt(); // outputs 7, if not str outputs -1
//or
var num = str.toInt(0); // outputs 7, if not str outputs 0
这样我总是得到一个整数返回。
var num = "fsdfsdf242342";
typeof num => 'string';
var num1 = "12423";
typeof num1 => 'number';
+num1 = > 12423`
var num1 = "12423"; typeof num1;
返回 string
。 - Edu ZamoraNaN
,那么直接的解决方案就是测试您获取的值是否为 NaN
:var v = whatever-conversion-you-prefer(s); if (isNaN(v)) ...handle the error... else ...use v...
。 - ToolmakerSteve
fr-FR
中,123456789.123
为123 456 789,12
)请参见此讨论。 - vsync