-1

我有两个单独的 if else 语句。即使我认为只有一个是真的,另一个总是被调用,反之亦然。这里是

第一个

if (pension < 0 ) {
    alert("Pension value error. Try again.");
}

else if (pension > income) {
    alert("RRSP Contribution cannot exceed the income.");
}

第二个

if (unionDues < 0 ) {
    alert("Union dues value error. Try again.");
}

else if (unionDues > (income - pension)) {
    alert("Union dues cannot exceed the income less the RRSP contribution");
}

if(pension > income) 和 if(unionDues > (income - penis)) 总是互相调用。

变量收入是事先提示的,之后的检查是检查值是否有效。

如果我的收入是 100,我的养老金是 50,而我的 unionDues 是 60,我认为它应该只调用第二个 if else 语句,但它同时调用两者。

如果我的收入是 1,我的养老金是 2,而我的 unionDues 是 0,那么两个警报也会被提醒。有谁知道我的问题是什么?

编辑:修复很简单,我只是 parseFloat() 一切,它工作。

4

2 回答 2

0

首先,您应该确保所有三个值都是数字,而不是字符串,因为字符串比较不适用于具有不同位数的数字。您希望这里的所有内容都是实际数字。如果这些来自用户输入数据,那么您将不得不使用类似parseInt(nnn, 10).


那么,一旦它们都是数字,你的逻辑就有问题了。

如果pension大于income,那么这两个else if陈述都是正确的。

第一个else if很明显,因为它是直接的else if (pension > income),如果养老金是正数,那么它将与第一个不匹配if

第二个else if (unionDues > (income - pension))将匹配,因为income - pension将为负数,这意味着任何位置值unionDues都将匹配此条件。


如果您只想触发一个警报,那么您可以将所有四个条件放入同一个逻辑语句中,或者使用一个if和三个else if,或者其他只选择一个条件的比较形式。

另一种可能的解决方案是累积错误字符串,如果错误字符串最后不为空,则显示一个包含所有错误条件的警报。


也许您所需要的只是显示遇到的第一个错误(如果您的所有值都是真实数字):

if (pension < 0 ) {
    alert("Pension value error. Try again.");
} else if (pension > income) {
    alert("RRSP Contribution cannot exceed the income.");
} else if (unionDues < 0 ) {
    alert("Union dues value error. Try again.");
} else if (unionDues > (income - pension)) {
    alert("Union dues cannot exceed the income less the RRSP contribution");
}
于 2013-04-09T02:31:00.707 回答
0
if (pension < 0) {
    alert("Pension value error. Try again.");
}
else if (unionDues < 0) {
    alert("Union dues value error. Try again.");
}
else if (pension > income) {
    alert("RRSP Contribution cannot exceed the income.");
}
else if (unionDues > (income - pension)) {
    alert("Union dues cannot exceed the income less the RRSP contribution");
}
于 2013-04-09T02:49:33.630 回答