2012-07-03 220 views
3

我需要比較兩個整數可能超過整數範圍限制。我怎樣才能得到這個在JavaScript中。 最初,我得到的值爲String,做一個parseInt並比較它們。整數比較

var test = document.getElementById("test").value; 
var actual = document.getElementById("actual").value; 
if (parseInt(test) == parseInt(actual)){ 
    return false; 
} 

任何選項使用長?另外,哪個最好使用parseInt或valueOf?

讚賞任何建議,

感謝

+0

這個數字有多大? –

回答

2

你最好到指定的基數。防爆。 parseInt('08')將給出0而不是8

if (parseInt(test, 10) === parseInt(actual, 10)) { 
+1

這對他們的幫助是比Javascript更大的數字如何處理? – Gareth

+0

謝謝。即使值超過32位或64位整數限制,這是否足夠。 – User

+0

@User:'「根據MDN的規範,JavaScript中的數字是」雙精度64位格式IEEE 754值「。所以它可以存儲的最大整數是53位。如果實際數字大於53位,則不應將其轉換爲Javascript數字。 – nhahtdh

5

留在他們的字符串和比較(已清理開頭和結尾的空間,您認爲安全的不換號的意思,除去其他字符的字符串後)。

Javascript中的數字可以達到53位的精度。檢查你的號碼是否在範圍內。

由於輸入預期爲整數,你可以嚴格,只允許輸入只匹配正則表達式:

/\s*0*([1-9]\d*|0)\s*/ 

(任意前導空格,前導0的任意數,有意義的數字序列或單個0,任意尾隨空格)

該數字可以從第一個捕獲組中提取。

0

假設整數,並且你已經驗證了你不想成爲比較的一部分的非數字字符,你可以清理一些前導/尾隨的東西,然後比較長度,如果長度相等,然後做一個簡單的ascii比較,這將適用於任意數量的任意長度:

function mTrim(val) { 
    var temp = val.replace(/^[\s0]+/, "").replace(/\s+$/, ""); 
    if (!temp) { 
     temp = "0"; 
    } 
    return(temp); 
} 

var test = mTrim(document.getElementById("test").value); 
var actual = mTrim(document.getElementById("actual").value); 

if (test.length > actual.length) { 
    // test is greater than actual 
} else if (test.length < actual.length) { 
    // test is less than actual 
} else { 
    // do a plain ascii comparison of test and actual 
    if (test == actual) { 
     // values are the same 
    } else if (test > ascii) { 
     // test is greater than actual 
    } else { 
     // test is less than actual 
    } 
} 
+0

空字符串(或只有空格的字符串)如何?它將比較等於「0」。 – nhahtdh

+0

@nhahtdh - 是的,我假設有兩個空字符串(空或只有空白)被認爲是零和相等的(OP沒有指定在這種情況下他們想要發生的事情)。在此之前,OP需要一個步驟來確定這種比較類型的有效性和無效性(正如我的答案中的第一句解釋的那樣)。我沒有試圖在我的回答中包含這些內容,因爲這不是問題的一部分,而且OP也沒有說明應該使用哪些驗證規則。 – jfriend00