代码总是返回NAN

时间:2013-07-13 14:58:35

标签: javascript

我目前正在参加编码课程,我们正在使用JS。我的代码很好,但我错过了一些东西,因为折扣输出我总是得到NAN。有谁知道为什么会这样?

//Input
var orderAmount = prompt("What is the order amount?");
var contractor = prompt("Are you a contractor? yes/no?");
var employee = prompt("Are you an employee? yes/no?");
var age = prompt("How old are you?");
//Constant
var employeeDisc = .10;
var largeOrderDisc = .05;
var contractorDisc = .20;
var taxRate = .08;
var noTax = 0;
//Calculations
    if (orderAmount >= 800) {
        var discounta = orderAmount * largeOrderdisc;
    }else {
        var discounta = 0;
    }
    if (contractor == "yes") {
        var discountc = orderAmount * contractorDisc;
    }else if(contractor == "no") {
        var discountc = 0;
    }
    if(employee == "yes") {
        var discounte = orderAmount * employeeDisc;
    }else if(emplyee == "no") {
        var discounte = 0;
    }
var discount = discountc + discounte + discounta;
var subtotal = orderAmount - discount;
    if (age >= 90){
        tax = subtotal * noTax;
    }else {
        tax = subtotal * taxRate;
    }
total = subtotal - tax;
//Output
document.write("Original Price: $" + orderAmount);
document.write("Discount: $" + discount);
document.write("Subtotal: $" + orderAmount);
document.write("Tax: $" + tax);
document.write("Final Price: $" + total);
document.write("Final Price: $" + total);

对于未编译的代码感到抱歉。它现在已修复。现在的问题是我的document.write没有写。

5 个答案:

答案 0 :(得分:2)

您正在尝试使用字符串执行算术计算和比较。 NaN是“非数字”,这是算术运算失败的数值结果(例如除以零或NaN上的任何计算)。

请注意下面使用数字而不是字符串:

var employeeDisc = .10;
var largeOrderDisc = .05;
var contractorDisc = .20;
var taxRate = .08;
var noTax = 0;
//Calculations
if (orderAmount >= 800) {
    var discounta = orderAmount * largeOrderdisc;
} else {
    var discounta = 0;
}

<小时/> 此外,prompt()将返回一个字符串。在执行计算之前,您应该将其转换为数字。您可能希望使用parseInt()parseFloat()

这是一个生成NaN的简单示例:

var x = 'x5';
var y = '2';
var difference = x - y;
console.log( difference );  // Note: you can use console.log() to write messages to the console in your browser's developer tools.  It is handy for debugging.

答案 1 :(得分:1)

虽然您确实应该使用数字变量,但JavaScript会根据需要转换值。我测试了你的代码,真正的问题是这两行:

}else (contractor == "no") {

}else (emplyee == "no") {

这些应该是

}else if(contractor == "no") {

}else if(emplyee == "no") {

脚本甚至不会像发布的那样编译,所以我不知道你是怎么得到NaN的。

答案 2 :(得分:1)

您的其他声明现在不正确,因此代码根本无法运行。删除(contractor == "no")之类的表达式  这是一个显示它工作的小提琴。 http://jsfiddle.net/bitfiddler/6fYvd/

答案 3 :(得分:0)

在Javascript中,只要您尝试对不是数字的数据执行数学运算,就会返回NaN(非数字)。您需要检查它返回字符串而不是数字

的步骤

答案 4 :(得分:0)

这是因为你在if子句中声明折扣变量。在if子句之外定义它们,那么你就没有问题了。

var discounta;
if (a > b) {
   discounta = 0.1;
}
else {
   discounta = 0.2;
}

同时检查javascript的变量范围。