Javascript 代码总是返回NAN

Javascript 代码总是返回NAN,javascript,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?"); va

我目前正在学习编码课程的介绍,我们正在与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不是在写

您正在尝试使用字符串执行算术计算和比较。是“Not A Number”,这是失败的算术运算的数值结果(例如除以零,或任何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;
}

此外,将返回一个字符串。在进行计算之前,应将其转换为数字。您可能想使用或

下面是一个生成
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.

您正在尝试使用字符串执行算术计算和比较。是“Not A Number”,这是失败的算术运算的数值结果(例如除以零,或任何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;
}

此外,将返回一个字符串。在进行计算之前,应将其转换为数字。您可能想使用或

下面是一个生成
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.

在Javascript中,每当您尝试对非数字的数据进行数学运算时,都会返回NaN(非数字)。您需要检查它在哪个步骤返回字符串,而不是Javascript中的数字。每当您尝试对非数字的数据进行数学运算时,都会返回NaN(非数字)。您需要检查它在哪个步骤返回字符串而不是数字,这是因为您在if子句中声明了折扣变量。在if子句之外定义它们,那么就没有问题了

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

还要检查javascript的变量范围。

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

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

还要检查javascript的变量范围。

虽然您确实应该使用数字变量,但javascript会根据需要转换值。我测试了您的代码,它的真正问题在于以下两行:

}else (contractor == "no") {

这些应该是

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


脚本甚至不会按发布的方式编译,因此我不知道您是如何得到NaN的。

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

}else (contractor == "no") {

这些应该是

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


脚本甚至无法按发布的方式编译,因此我不知道您是如何得到NaN的。

您的else语句现在不正确,因此代码根本无法运行。删除类似
(contractor==“no”)

这是一把小提琴,显示它在工作

您的else语句现在不正确,因此代码根本无法运行。删除类似
(contractor==“no”)

这是一把小提琴,显示它在工作

看起来JS实际上会在这里将输入转换为数字<代码>'5'*'2'->10'5'+'2'='52',所以不要依赖它。这里-是的,但这不会产生
NaN
JavaScript确实有类型强制,但我避免了它。我不喜欢通常由类型强制引起的意外结果。似乎JS实际上会在这里将输入转换为数字<代码>'5'*'2'->10'5'+'2'='52',所以不要依赖它。这里-是的,但这不会产生
NaN
JavaScript确实有类型强制,但我避免了它。我不喜欢通常由类型强制引起的意外结果。嗯,
discountc
discounte
discounta
NaN
。你不应该这样比较,先转换为int:
“15”>“10”>true;“15”>“9”->错误
请发布工作代码(当前代码甚至没有编译)并提供一个提琴以获得更有用的答案。以上所有内容的补充:
if(contractor==“yes”)}否则如果(contractor==“no”){
-如果用户在提示框中键入
fgsfds
(是的,用户可能会这么愚蠢)。嗯,
discountc
discounte
discounta
都是
NaN
。你不应该这样比较,先转换成int:
“15”>“10”->true;“15”>“9”->false
请发布工作代码(当前代码甚至没有编译)并提供一把小提琴,以获得更有用的答案。上述所有内容的补充:
if(contractor==“yes”)}else if(contractor==“no”){
-如果用户在提示框中键入
fgsfds
,该怎么办?(是的,用户可能如此愚蠢)。实际上,JavaScript在这方面与C或Java不同。只有函数才能创建新的作用域。不过,出于可读性的目的,我同意你的建议。实际上,JavaScript在这方面与C或Java不同。只有函数才能创建新的作用域。尽管如此,出于可读性的目的,我同意你的建议。