我有两个单独的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(养老金&gt;收入)和if(unionDues&gt;(收入 - 养老金))总是互相称呼。
手动提示变量收入,之后的检查是检查值是否有效。
如果我的收入是100,而我的退休金是50,而我的unionDues是60,我认为它应该只调用第二个if else语句,但它会同时调用它们。
如果我的收入是1,而我的退休金是2,而我的unionDues是0,那么这两个警报也会被警告。有谁知道我的问题是什么?
编辑:修复很简单,我只是parseFloat()所有内容都有效。
答案 0 :(得分: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");
}
答案 1 :(得分: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");
}