String To Number Confusion

时间:2017-03-03 00:00:44

标签: javascript jquery parseint

为什么parseInt("-1000-500-75-33")会返回-1000

不应该返回这些数字的总和:-1608

如何将字符串"-1000-500-75-33"作为这些数字的总和返回?

5 个答案:

答案 0 :(得分:3)

parseInt将尝试从字符串的开头获取一个数字。

由于-是用于开始数字的有效字符,因此它会解析字符串,直到找到无效的字符串。第二个-无效,因为没有整数可以在其中包含-,只有数字。所以它停在那里并认为数字是"完成"。

现在,如果你想处理表达式,你可以像这样使用eval

eval("-1000-500-75-33")

这将按预期返回-1608

答案 1 :(得分:1)

parseInt将不执行任何计算,而是尝试将字符串转换为整数。它返回-1000,因为之后的破折号不会被视为有效数字。如果你想将所有这些数字相加,你可以在破折号上分割,映射到数字,然后减少:

var numString = "-1000-500-75-33";
numString.split('-').map(e => Number(e)).reduce((a, b) => a - b);

答案 2 :(得分:0)

由于它们在一个字符串中,ParseInt不会解析整个字符串,只是从开头找到第一个适用的数字&归还它。如果无法解析字符串的开头,则返回NaN

parseInt("-1000NOT_NUMBER") = -1000
parseInt("test-1000`) = NaN

您必须使用eval函数来执行您想要的操作,它会评估给定的字符串,就好像它是输入控制台的命令一样;

eval("-1000-500-75-33") = -1608

答案 3 :(得分:0)

尝试eval! it's safe here

eval("-1000-500-75-33").toString()

答案 4 :(得分:0)

console.log(eval("-1000-500-75-33").toString());

关于类型转换:解析-1000后,显然是“负1000”,一旦检测到数字和数字之间共同的符号,它将逃脱转换。字符串。因此parseInt"-1000-500-75-33"视为"-1000NotConvertableString",因此留下剩下的距离,返回-1000作为类型转换的结果。