每个CharAt的索引并乘以每个索引号

时间:2018-03-24 16:43:41

标签: javascript

我试图将每个索引号相乘,看起来像parseInt最后还返回一个小数......不确定为什么?

    var decNum = "12312312312312";

    if( decNum.length == 14)
    {
        var lastnum = decNum.charAt(13);


        var newNum = parseInt(decNum)/14; // rather 1231231231231 it shows 1231231231231.2 should be 13 nums left without last digit in int.


        var validNum = [1,7,4,2,8,7,3,2,1,2,3,4,1,3];
        var sum;

        for (var i = 0; i < validNum.length; i++) {

        //since I can't use charAt for for INT so parse to string and parse it back to int to do the math.
            sum += parseInt(validNum[i]) * parseInt(String(newNum.charAt(i)));
        }

2 个答案:

答案 0 :(得分:0)

parseInt返回一个数字,因此var newNum = parseInt(decNum)/14;会导致newNum数字,而不是字符串。所以,你不能在数字上使用charAt - 你想要字符串。你有小数,因为当你将整数(decNum)除以14时,结果是一个连续的小数。

如果您想使用显式类型转换:

const newNum = String(parseInt(decNum / 14));

您不需要parseInt validNum元素,因为它们已经是整数。

您的sum未初始化为0,因此后续sum +=行将失败。

即使在修复之后,使用数组方法迭代字符串仍然会更优雅:

const decNum = "12312312312312";
if( decNum.length == 14) {
  const newNum = String(parseInt(decNum / 14));
  const validNum = [1,7,4,2,8,7,3,2,1,2,3,4,1,3];
  const charCodeArr = newNum.split('').map(char => char.charAt(0));
  const sum = charCodeArr.reduce((sumSoFar, charCode, i) => {
    return sumSoFar + (charCode * validNum[i]);
  }, 0);
  console.log(sum);
}

答案 1 :(得分:0)

现在一切正常,谢谢大家。

    var decNum = "12312312312312";

    if( decNum.length == 14)
    {
        var lastnum = decNum.charAt(13);


        var newNum = String(parseInt(decNum)/14);

        var validNum = [1,7,4,2,8,7,3,2,1,2,3,4,1,3];
        var sum = 0;

        for (var i = 0; i < validNum.length; i++) {
            sum += parseInt(validNum[i]) * parseInt(newNum.charAt(i));
        }