当我需要一个数字时,JS Variable输出为isNaN

时间:2012-10-17 23:41:40

标签: javascript

这是作业,所以我很清楚我正在尝试做什么。

  

编写一个程序,根据三个因素计算酒店房间的价格。首先,一个房间会有多少人:1-2,3-4或5-6?一个房间不允许超过六人。二,是AAA的客人吗?第三,他们想要一个有视野的房间吗?费率计算如下:

     

基本房价为:           1-2人= 50美元/晚           3-4人= 60美元/晚           5-6人= 70美元/晚       AAA会员可享受每晚基本房价的折扣:           1-2人= 15%           3-4人= 10%           5-6人= 5%       在进行所有其他计算后,每晚观景房的费用将增加10%。

     

程序应提示用户输入所有内容,执行计算并输出每晚的总费用。建议至少使用一些嵌套的if / else结构来计算成本。

像firebug和JSLint这样的调试器没有任何帮助,我怀疑我只是做了一些完全错误的事情,尽管我之前没有遇到过“嵌套if”逻辑分配的问题。无论我是一个完整而彻底的新人。

当我通过输入1为numberOfGuests进行测试,N为tripleAStatus,N为roomView时,finalRate以isNaN(我知道这不是一个数字)返回,我无法弄清楚原因。

//Variable Declaration

var numberOfPeople;
var tripleAStatus;
var roomView;
var discountRate;
var roomRate;
var finalRate;
var discountPercent;

//Input

numberOfPeople = prompt("How many guests will their be? 6 Maximum.");


tripleAStatus = prompt("Are you a AAA Member? Y/N.");

roomView = prompt("Would you like your room to have a view?");



//Logic

if ((numberOfPeople <= 2) && (numberOfPeople > 0)) {
   roomRate = 50;
   discountPercent = .15;
} else if ((numberOfPeople <= 4) && (numberOfPeople > 2)) {
   roomRate = 60;
   discountPercent = .10;
} else if ((numberOfPeople <= 5) && (numberOfPeople > 4)) {
   roomRate = 70;
   discountPercent = .5;
} else {
   alert("Your number of guests must be at least 1 and no more than 6");
}

if (tripleAStatus = "Y") {
   discountRate = roomRate - (roomRate * discountRate);
} else if (tripleAStatus = "N") {
   discountRate = roomRate;
} else {
   alert("You need to answer with either Y or N");
}

if (roomView = "Y") {
   finalRate = (discountRate) + ((discountRate) * .10);
} else if (roomView = "N") {
   finalRate = discountRate;
} else {
   alert("You need to answer with either Y or N");
}

//Output

document.write("Total cost per night is " + "$" + finalRate);

6 个答案:

答案 0 :(得分:2)

看起来像是

discountRate = roomRate - (roomRate * discountRate);

应该阅读

discountRate = roomRate - (roomRate * discountPercent);

这就是你在finalRate中获得NaN的原因;此时还没有定义discountRate,因此您的代码实际上是discountRate = 1 - (1 * undefined)

正如其他海报所述,您还需要更改条件以使用=====; =是一个赋值运算符,因此您不是要检查tripleAStatus是否"Y",而是实际检查"Y"是否评估为true(它总是会{ )。

tripleAStatus = 'N';
if (tripleAStatus = 'Y') {
    // tripleAStatus is now "Y", and the code inside this if will always be executed
}

工作变更:http://jsfiddle.net/5ZVkE/

答案 1 :(得分:0)

在If语句中,您使用单个“=”分配值。由于分配总是发生,它将返回true。为了比较值,您需要在if语句中使用double“==”。像这样:

if (tripleAStatus == "Y") {
   discountRate = roomRate - (roomRate * discountRate);
} else if (tripleAStatus == "N") {
   discountRate = roomRate;
} else {
   alert("You need to answer with either Y or N");
}

答案 2 :(得分:0)

将'if'语句中的单个'='替换为'=='。您当前正在使用赋值运算符而不是相等。

e.g:

if (tripleAStatus == "Y") ...

答案 3 :(得分:0)

您在if语句中使用赋值而不是相等运算符。即改变

if (tripleAStatus = "Y")

if (tripleAStatus == "Y")

答案 4 :(得分:0)

请使用=== !!这样,语句中的类型不是casted,因此如果它的类型相同,则会更严格地检查。

if (tripleAStatus === "Y") {
   discountRate = roomRate - roomRate * discountRate;
} else if (tripleAStatus === "N") {
   discountRate = roomRate;
}

/ e - &gt; &安培;它更快!

答案 5 :(得分:0)

prompt()会返回STRING而不是NUMBER。

parseInt()numberOfPeople一起使用。

另一个问题是,您在公式中复制并粘贴了错误的变量名称。看看您如何使用discountRate代替discountPercent