2012-07-03 154 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