如何通过'多个大于支票

时间:2015-11-19 13:15:23

标签: javascript math

假设你有号码var n = 1,000,000;

我想查一下:

n >= 1e3
n >= 1e4
n >= 1e5
n >= 1e6

完全按照上面的说法执行它会导致语句在第一个有效表达式上返回true,显然。这意味着它会说n is greater than 1e3并从那里返回结果。

我怎样才能把它改为“级联”?通过表达式直到它遇到错误,然后使用最后一个为真的语句,而不必去:

if( n >= 1e3 && n >= 1e4 && n >= 1e5 && n >= 1e6  ) {...

2 个答案:

答案 0 :(得分:1)

你应该检查从最大到最小的数字:

var n = 1000000;
var r = document.getElementById("result");
if (n >= 1e6) r.innerHTML = "n >= 1e6";
else if (n >= 1e5) r.innerHTML ="n >= 1e5";
else if (n >= 1e4) r.innerHTML ="n >= 1e4";
else if (n >= 1e3) r.innerHTML = "n >= 1e3";
<div id="result"></div>

如果你需要拥有所有不同的句子,你可以这样做:

var r = document.getElementById("result");
var n = 1000000;
var str = "";
if (n >= 1e6) str += "n >= 1e6 ";
if (n >= 1e5) str += "n >= 1e5 ";
if (n >= 1e4) str += "n >= 1e4 ";
if (n >= 1e3) str += "n >= 1e3 ";
r.innerHTML = str;
<div id="result"></div>

要有更可维护和可扩展的东西:

var n = 1000000;
var r = document.getElementById("result");
check(n, [1000, 1e4, 1e5, 1e6]);
function check(nb, limits) {
	limits.sort(function(a, b){return b-a});
    var limitsLength = limits.length;
    for (var i =0;i<limitsLength;i++) {
    	if (nb >= limits[i]) r.innerHTML += "n >= 1e" + Math.log10(limits[i]) + " ";
    }
}
<div id="result"></div>

答案 1 :(得分:1)

无需分支。

function yours() {
    if (n < 1) return 'n is less than 1e0';
    return 'n is greater than 1e' + Math.log10(n);
}

如果你必须分支(例如,如果你实际上计算的东西比简单的对数更复杂),添加一个新函数以避免你提到的“级联”。 return语句将阻止级联。新函数定义了跳过多少东西。

function yours() {
    println(figure(n));
}

function figure(n) {
    if (n > 10000) return 'n is greater than 1e4';
    if (n > 1000) return 'n is greater than 1e3';
    if (n > 100) return 'n is greater than 1e2';
    if (n > 10) return 'n is greater than 1e1';
    if (n > 1) return 'n is greater than 1e0';
}

我在这里使用println代替您想要对结果做的任何事情。