整数比较

时间:2012-07-03 07:09:24

标签: javascript

我需要比较两个可能超过整数范围限制的整数。我如何在JavaScript中获得此功能。 最初,我得到值为String,做一个parseInt并比较它们。

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

任何长期使用的选项?另外,哪个最好使用parseInt或valueOf?

任何建议表示赞赏,

由于

3 个答案:

答案 0 :(得分:5)

将它们保留在String中并进行比较(在清理了前导和尾随空格的字符串之后,以及您认为可以安全删除的其他字符而不更改数字的含义)。

Javascript中的数字最高可达53位。检查您的号码是否在范围内。

由于输入应该是整数,你可以是严格的,只允许输入只匹配正则表达式:

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

(任意前导空格,任意数量的前导0,有意义数字序列或单个0,任意尾随空格)

可以从第一个捕获组中提取数字。

答案 1 :(得分:3)

您最好分配基数。防爆。 parseInt('08')0而不是8

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

答案 2 :(得分: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
    }
}