You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

字符索引值相乘及parseInt返回小数的JavaScript技术问题咨询

解决你的两个问题:整数处理与索引相乘逻辑

嘿,我来帮你搞定这两个问题!

一、解决parseInt返回小数的问题

你现在用parseInt(decNum)/14来获取去掉最后一位的整数,这是逻辑错误哦——因为去掉最后一位数字本质是除以10取整,而不是除以14。14是你的校验数组长度,但和“去掉最后一位”的操作完全无关。

举个例子,你的decNum是"12312312312312",最后一位是2,去掉它应该得到1231231231231,正确的做法有两种:

  1. 字符串截取法(更直观):直接取前13位字符串再转成整数
var newNum = parseInt(decNum.slice(0, 13)); 
// 结果:1231231231231,完美符合预期
  1. 数学计算法:用Math.floor对原数除以10取整(因为原数是14位,最后一位是个位,除以10后取整就去掉了个位)
var newNum = Math.floor(parseInt(decNum) / 10);
// 结果同样是1231231231231

为什么之前除以14会得到小数?因为12312312312312 ÷ 14 = 1231231231231.2,这个计算和“去掉最后一位”完全不相关,换上面两种方法就没问题啦。

二、实现索引对应数值相乘的逻辑

你提到“整数无法使用charAt”,其实不用纠结把newNum转成整数后再处理——直接从原字符串的前13位取每个字符,转成数字后和validNum对应索引的元素相乘,再累加求和就好。这样代码更简单,也避免了大数可能带来的精度问题(虽然你的数字长度还没到JS整数精度上限,但字符串处理更稳妥)。

完整的修正代码如下:

var decNum = "12312312312312"; 
if(decNum.length === 14) { 
  // 1. 获取去掉最后一位的数字(用字符串截取法)
  var newNumStr = decNum.slice(0, 13); 
  var validNum = [1,7,4,2,8,7,3,2,1,2,3,4,1,3]; 
  var sum = 0; 

  // 2. 遍历前13位,和validNum对应索引的数值相乘累加
  for (var i = 0; i < 13; i++) { 
    // 把当前位置的字符串转成数字,和validNum[i]相乘后加到sum里
    var currentDigit = parseInt(newNumStr.charAt(i)); 
    sum += currentDigit * validNum[i]; 
  }

  // 如果你需要用最后一位校验的话,可以继续写逻辑,比如:
  var lastDigit = parseInt(decNum.charAt(13));
  console.log("累加和:", sum);
  console.log("最后一位:", lastDigit);
}

如果一定要用整数newNum来处理,也可以把它转成字符串再用charAt,比如:

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

不过这种方法多了一步转字符串,不如直接用原字符串截取高效。

内容的提问来源于stack exchange,提问作者Tyler

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:40:14