簡體   English   中英

如何在javascript中將數字作為字符串進行比較

[英]How to compare numbers as as string in javascript

我想比較 2 個數字,它們的類型是字符串,並返回它們匹配的 pourcentage。 規則是從左到右比較。 數字可以包含 1 到 6 位數字:

如果匹配 6 位數字 ==> 匹配 =100%

如果匹配 5 位數字 ==> 匹配 = 90%

如果匹配 4 位數字 ==> 匹配 = 80%

如果 3 位數字匹配 ==> 匹配 = 60%

如果 2 位數字匹配 ==> 匹配 = 40%

其余的 ==> 匹配 =0%

示例 1:

123456 和 123456 ==> 匹配 = 100%

12345 和 12345 ==> 匹配 = 90%

1234 和 1234 ==> 匹配 = 80%

123 和 123 ==> 匹配 = 60%

12 和 12 ==> 匹配 = 40%

對於上面的這些情況,我的函數做到了。 但是當我有兩個數字時,數字的位數並不相同。

示例 2:

123456 和 12 ==> 匹配應該是 40,因為我從左到右比較,我有 2 個第一個數字是相同的。

123456 和 123 ==> 匹配應該是 60。我的前 3 個數字是相同的

123456 和 1234 ==> 匹配應該是 80。我有 4 個第一個數字是相同的

123456 和 12345 ==> 匹配應該是 90。我的前 5 個數字是相同的

123456 和 129876 ==> 匹配應該是 40。我的前 2 個數字是相同的。

我的代碼是:

function string_compare (string_1, string_2){
let per
if ((string_1.substring(0, 2) == string_2.substring(0, 2)) && (string_1.length == string_2.length) && (string_1.length == 2 || string_1.length == 2))
{
per = 40
}
else if (string_1.substring(0, 3) == string_2.substring(0, 3) && (string_1.length == string_2.length) && (string_1.length == 3 || string_1.length == 3))
{
per = 60
}
else if (string_1.substring(0, 4) == string_2.substring(0, 4) && (string_1.length == string_2.length) && (string_1.length == 4 || string_1.length == 4))
{
per = 80
}
else if (string_1.substring(0, 5) == string_2.substring(0, 5) && (string_1.length == string_2.length) && (string_1.length == 5 || string_1.length == 5))
{
per = 90
}
else if (string_1.substring(0, 6) == string_2.substring(0, 6) && (string_1.length == string_2.length) && (string_1.length == 6 || string_1.length == 6))
{
per = 100
}else {
per = 0
}
return per

}

return string_compare("126543", "120000")

如何修改我的函數以處理/添加示例 2 中的案例? 示例 1 和示例 2 的其他所有內容均為 0%

謝謝

您嘗試做的事情沒有意義(或至少對我而言),但您可以使用以下算法“解決您的問題”

 var num1 = "123456", num2 = "123", match = 0; for(var i = 0; i < 6; i++){ if(num1[i] != num2[i]){ break; } match += 1 } // Shorter... // for(var i = 0, match = 0; i < 6 && num1[i] == num2[i]; i++, match++); var percentage; switch(match){ case 6: percentage = 100; break case 5: percentage = 90; break case 4: percentage = 80; break case 3: percentage = 60; break case 2: percentage = 40; break default: percentage = 0; break } console.log(percentage)

像這樣的東西需要更少的重復編碼,更多......數學和邏輯:-)

function percentdiff(numstring1, numstring2) {
  for(var i=0, l=Math.min(numstring1.length, numstring2.length); i<l; ++i) {
    if(numstring1[i] != numstring2[i]) {
      break;
    }
  }
  return [-1, -1, 40, 60, 80, 90, 100][i];
}

我們逐個字符地遍歷字符串,直到兩個字符串中較短的一個的長度。

只要當前位置的兩個數字第一次不再匹配,就離開循環。

所以i將是循環后左邊匹配數字的數量。

由於您的百分比分布沒有遵循明確的公式,因此我在此處使用了一個數組來將百分比與匹配數字的數量相匹配。 由於該數字可能小於 2,因此我在開頭插入了兩個“假”值 -1,以免引發錯誤。

(只有潛在輸入字符串長度超過 6 位匹配項超過 6 的邊緣情況,這里沒有明確處理。)

 let per = [0,0,40,60,80,90,100] calcPer = (num1, num2) => { num1= num1.toString(); num2= num2.toString(); count = 0; for(let i=0;i<num1.length;i++) { if(num1[i] == num2[i]) count += 1; else break; } return per[count] } console.log(calcPer(123456,123456)) console.log(calcPer(12345,12345)) console.log(calcPer(1234,1234)) console.log(calcPer(123,123)) console.log(calcPer(12,12)) console.log(calcPer(123456,12)) console.log(calcPer(123456,123)) console.log(calcPer(123456,1234)) console.log(calcPer(123456,12345)) console.log(calcPer(123456,129876))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM