我需要比较两个可能超过整数范围限制的整数。我如何在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 :(得分: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
}
}