2013-07-13 4 views
0

В настоящее время я вхожу в введение в класс кодирования, и мы работаем с JS. Мой код хорош, но мне что-то не хватает, потому что для дисконтных выходов я всегда получаю NAN. Кто-нибудь знает, почему это происходит?код всегда возвращается 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

Ну, либо 'discountc',' discounte', либо 'discounta' является' NaN'. –

+0

Вы не должны сравнивать это, сначала конвертируйте в int: '" 15 ">" 10 "-> true; «15»> «9» -> false' – mishik

+0

Пожалуйста, напишите рабочий код (текущий код даже не компилируется) и не предоставите скрипту, чтобы получить более полезные ответы. –

ответ

1

Ваши другие утверждения теперь не соответствуют требованиям, поэтому код не запускается вообще. Удалите выражения, такие как (contractor == "no") Вот скрипка, показывающая, что она работает. http://jsfiddle.net/bitfiddler/6fYvd/

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

похоже, что JS на самом деле конвертирует вход в номер здесь. ''5' * '2' -> 10' – mishik

+2

'5' + '2' == '52', так что не полагайтесь на это. – Padrig

+0

Здесь - да, но это не даст 'NaN' – mishik

0

В JavaScript NaN (не число) возвращается всякий раз, когда вы пытаетесь сделать математическую операцию на данных, которые не является числом. Вам нужно будет проверить, на каком этапе он возвращает строку вместо номера

0

Это потому, что вы объявляете свои дисконтные переменные в предложениях. Определите их вне предложений if, тогда у вас не будет проблем.

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

Также проверьте области переменных для javascript.

+3

На самом деле, JavaScript не похож на C или Java в этом отношении. Только функции создают новую область. Тем не менее, я согласен с вашим предложением в целях удобочитаемости. – dsh

+0

Спасибо за уведомление. – erdimeola

1

В то время как вы действительно должны использовать числовые переменные, JavaScript преобразует значения по мере необходимости. Я проверил ваш код и реальная проблема с ним эти две линии:

}else (contractor == "no") { 

и

}else (emplyee == "no") { 

Они должны быть

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

и

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

Сценарий даже не компилируется, как опубликовано, поэтому Я не знаю, как вы даже получаете NaN.

Смежные вопросы