You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

JavaScript实现1-6位数字左对齐匹配百分比计算的函数方案

JavaScript数字逐位匹配百分比计算方案

嘿,我来给你搞定这个逐位匹配算百分比的需求!先把需求再捋一遍:拿两个1-6位的数字,从左到右逐位对比,按连续匹配的位数给对应百分比——6位全中100%,5位90%,4位80%,3位60%,2位40%,剩下的情况都算0%。

这里我给你两种常见场景的实现,你可以根据实际业务需求选择:

场景1:统一补前导零到6位后对比

适合要求两个数字按6位长度对齐,短数字前面补零的情况(比如把123当成000123123456对比)。

function calculateMatchPercentage(num1, num2) {
  // 转字符串并补前导零到6位,确保两个字符串长度一致
  const str1 = String(num1).padStart(6, '0');
  const str2 = String(num2).padStart(6, '0');
  
  let consecutiveMatches = 0;
  
  // 从左到右逐位对比,遇到不匹配就停止计数
  for (let i = 0; i < 6; i++) {
    if (str1[i] === str2[i]) {
      consecutiveMatches++;
    } else {
      break;
    }
  }
  
  // 按匹配位数返回对应百分比
  switch(consecutiveMatches) {
    case 6:
      return 100;
    case 5:
      return 90;
    case 4:
      return 80;
    case 3:
      return 60;
    case 2:
      return 40;
    default:
      return 0;
  }
}

测试示例:

console.log(calculateMatchPercentage(123456, 123456)); // 输出100
console.log(calculateMatchPercentage(123456, 123450)); // 输出90
console.log(calculateMatchPercentage(123, 123456)); // 输出0(补零后000123 vs 123456,第一位不匹配)

场景2:左对齐对比到较短数字的长度

适合短数字和长数字左对齐,只对比到短数字的位数(比如123123456对比前3位,算3位匹配)。

function calculateMatchPercentage(num1, num2) {
  const str1 = String(num1);
  const str2 = String(num2);
  // 只对比到两个数字中较短的那个长度
  const maxCompareLength = Math.min(str1.length, str2.length);
  
  let consecutiveMatches = 0;
  
  for (let i = 0; i < maxCompareLength; i++) {
    if (str1[i] === str2[i]) {
      consecutiveMatches++;
    } else {
      break;
    }
  }
  
  // 按规则返回百分比
  switch(consecutiveMatches) {
    case 6:
      return 100;
    case 5:
      return 90;
    case 4:
      return 80;
    case 3:
      return 60;
    case 2:
      return 40;
    default:
      return 0;
  }
}

测试示例:

console.log(calculateMatchPercentage(123, 123456)); // 输出60
console.log(calculateMatchPercentage(12345, 123450)); // 输出90
console.log(calculateMatchPercentage(123456, 123)); // 输出60

两种实现的核心都是统计从左开始的连续匹配位数——毕竟你要求“从左到右进行比较”,一旦某一位不匹配,后面的就算一致也不再统计啦。

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

火山引擎 最新活动