4

我需要比较两个可能超出整数范围限制的整数。我如何在javascript中得到这个。最初,我将值作为字符串,执行 parseInt 并比较它们。

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

有什么选项可以使用 long 吗?另外,哪个最好使用 parseInt 或 valueOf ?

任何建议表示赞赏,

谢谢

4

3 回答 3

4

你最好指定基数。前任。parseInt('08')不会。0_8

if (parseInt(test, 10) === parseInt(actual, 10)) {
于 2012-07-03T07:11:26.173 回答
4

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

Javascript 中的数字可以达到 53 位精度。检查您的号码是否在范围内。

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

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

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

该号码可以从第一个捕获组中提取。

于 2012-07-03T07:11:41.443 回答
1

假设整数并且您已经验证了您不想参与比较的非数字字符,您可以清理一些前导/尾随的东西,然后只比较长度,如果长度相等,然后执行普通的 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
    }
}
于 2012-07-03T07:26:35.660 回答