我目前正在参加编码课程,我们正在使用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没有写。
答案 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的变量范围。