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


当心,如果您使用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")

如果这不适合你,那么就有parseIntunary plusparseFloat和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>





parseint