var X = 51000000;
if (X > (1000000 << 5) + (1000000 << 4) + (1000000 << 1)){
console.log("X es mayor a 50 millones");
}
else{
console.log("X es menor a 50 millones");
}
var t0 = performance.now();
/* Codigo */
var X = 51000000;
if (X > (1000000 << 5) + (1000000 << 4) + (1000000 << 1)){
console.log("X es mayor a 50 millones");
}
else{
console.log("X es menor a 50 millones");
}
/* Fin Codigo*/
var t1 = performance.now();
console.log("Tardo: " + (t1 - t0) + " milisegundos.");
var t0 = performance.now();
/* Codigo */
var X = 51000000;
if (X > 5e7) {
console.log("X es mayor a 50 millones");
} else {
console.log("X es menor a 50 millones");
}
/* Fin Codigo*/
var t1 = performance.now();
console.log("Tardo: " + (t1 - t0) + " milisegundos.");
写得更短:
就是这样
5 * 10^7
(或“一个 5 后跟 7 个零”)。
而且,不,不,不,不,不,不,不!!!不要将正则表达式用于这样简单的事情。它将把一个琐碎的声明变成一头试图通过钥匙孔吃花生的大象......对于好奇的人来说,正则表达式会是
/^0*(?:(?:[6-9]|[1-5]\d|5(?=0*[1-9])))\d{7}/
,但不要使用它,更不用说我写的了。作为对Mariano和Larry U答案的贡献,我添加了一个可能的解决方案,显然不是那么优雅。
使用bit shifts,我生成以下数字:
哪个加在一起给出
50000000
。它可以用来比较和确定数字是更少还是更大。更新
关于@Ruben 的评论,我对这些指令的执行速度进行了比较:
结论:从这些示例中可以看出,就执行速度而言,Mariano 的响应更有效。
可以以二进制或任何其他基数进行比较。
使用该方法
toString
,传递一个基数作为参数,即toString(base)
,我们可以比较以 36 为底的数字,这是该方法允许的最大值。在这种情况下,如果字符串的长度等于字符串 的长度(以
tro8w
36 为基数为 5000 万),并且如果它按字母顺序大于该字符串,或者它的长度大于字符串的长度,我们必须返回true
_我认为使用正则表达式,大于 50000000 的数字可以表示如下:
如果数字有 8 位,第一个不能等于 50000000
我们将其余大于 50000000 的 8 位数字相加
如果数字超过 8 位,则第一个必须大于或等于 1(避免验证 9 个或更多零)
0*
这些数字中的任何一个都可以在它们的开头有无限的零。结合这些表达式,我们得到:
^0*(?:5(?!0{7})|[6-9]|[1-9]\d)\d{7,}$
^
并且$
要保证变量是一个数字(?: )
将元素组合在一起,而不保存任何参考或链接以供将来使用。(?! )
它可以帮助我检测某个表达式后的模式并将其丢弃,在这种情况下,5 后有 7 个零。对于不那么“科学”的:
接着,
甚至,