我试图将每个索引号相乘,看起来像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)));
}
答案 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));
}