将字符串转换为整数(Javascript)

时间:2018-02-20 15:05:05

标签: javascript string math integer

我知道有很多人在询问如何将字符串转换为整数/数字。但我无法找到我正在寻找的东西。

我正在尝试将数学问题转换为整数。这是我的代码:

var str = '1 + 5';
var answer = parseInt(str);
console.log(answer);

输出:1

首选输出:6

8 个答案:

答案 0 :(得分:3)

最简单的答案是使用eval()

var answer = eval('1 + 5');

这会将6分配给answer

当然,eval()允许任意代码执行,因此如果字符串来自未知或不可信的源,则可以使用exceptionally dangerous函数。在这种情况下,您可能需要考虑使用PegJS

之类的内容解析字符串

答案 1 :(得分:2)

如果您知道脚本的来源,可以使用函数eval,请注意这种方法。



var str = '1 + 5';
var answer = eval(str);
console.log(answer);




答案 2 :(得分:0)

SBPV_DBPV.loc[i, 'cluster'] = min(dist1,dist2,dist3)

答案 3 :(得分:0)

'1 + 5'是一个完整的字符串,在这种情况下,你可以打破字符串并添加该数组的每个元素

var str = '1 + 5';
var strArray = str.split('+');
var answer = 0;
strArray.forEach(function(item) {
  answer += parseInt(item, 10)
})
console.log(answer);

答案 4 :(得分:0)

Here's a prior post that meets your needs using third party libraries.

为了解释,math.js和JavaScript Expression Evaluator都可以解析您提供的输入,然后计算表达式的含义。

我还建议您阅读有关Lexers和Tokenization的内容,以便自己学习如何分解表达式,然后尝试解析生成的标记。这也有助于解决更复杂的问题,例如评估更高级别数学的表达式,或者处理自然语言或代码的意义或正确性。

Here's a basic lexer guide for JS

And here's some resources on parsing mathematical expressions

答案 5 :(得分:0)

另一个Function构造函数。



eq = '1 + 5';
x = new Function('return ' + eq)();
console.log(x)






runMath = x => new Function(`return ${x}`)();

console.log(runMath('1+5'))
console.log(runMath('2*10'))




答案 6 :(得分:0)

所以parseInt给你1的原因是因为parseInt遍历字符串直到第一个非数字字符,并返回结果。它被“+”绊倒,只返回1。答案不需要,但仍然需要添加一些有趣的内容。如果您使用的是Number()构造函数,则始终会获得NaN。出于这个原因,许多人会告诉你使用Number构造函数,但我认为有两种情况都可以。

要在不使用eval的情况下完成您想要的任务(您可能永远不会使用它,请参阅here了解相关信息),您可以拆分字符串并分别解析每个项目。最简单的方法是使用String.split()Array.map()

function isNumber(n){
  return !isNaN(n)
}
var t = '1 + 5 + 7'
         //split the string at whitespace into an array
         //this looks like ['1', '+', '5', '+', '7']
var x = t.split(' ') 
         //convert each item to a number, parseInt works here as well
         //this ouputs [1, NaN, 5, NaN, 7]
         .map(Number) 
         //filter out anything that couldn't be converted
         //and you're left with [1,5,7]
         .filter(isNumber) 
         //add each item in the array to get a sum result
         .reduce((a, b) => a + b) 
console.log(x) //outputs 13

仅当字符串中的运算符相同时才有效,但您可以添加测试以查看哪个运算符是哪个运算符,并传递不同的函数以减少以获得所需的结果。如果您有兴趣掌握javascript,我强烈建议您详细了解Array.map()Array.filter()Array.reduce()。这些函数非常有用,可能是我在整个语言中最喜欢的一组函数。

答案 7 :(得分:0)

如果您不想使用eval,但仍希望保持代码的简单,请使用正则表达式匹配数字和运算符,并使用switch选择合适的代码您的运营商的案例:

function parser(str) {
  const match = str.match(/(\d+) ([\+\-\*\/]) (\d+)/).slice(1);
  const operator = match.splice(1, 1)[0];
  const numbers = match.map(Number);
  switch(operator) {
    case '+': return numbers[0] + numbers[1];
    case '-': return numbers[0] - numbers[1];
    case '*': return numbers[0] * numbers[1];
    case '/': return numbers[0] / numbers[1];
  }
}

console.log(parser('1 + 2'));
console.log(parser('1 - 2'));
console.log(parser('2 * 2'));
console.log(parser('1 / 21'));