Я, кажется, получаю ошибку NaN в результате в моем коде JavaScript.

Я довольно новичок в этом, был бы признателен за любую помощь.

Решается путем придания значения общему вар.

-1
Normal_Dude_LearnsCode 16 Дек 2015 в 11:10

5 ответов

Лучший ответ

Есть пара проблем:

  • Вы должны использовать parseFloat вместо использования строк.
  • Вы должны инициализировать total (это то, что вызывает nan)
  • Вы должны правильно инициализировать массивы.

function tax() {
    var price = new Array(10);
    var quant = new Array(10);
    var taxam = 18;
    var total = 0;
    for(i=0;i<10;i++) {
        quant[i] = parseFloat(prompt("Insert Quantity: "));
        price[i] = parseFloat(prompt("Insert Price: "));
    }
    for(i=0;i<10;i++) {
        total += price[i] * quant[i];
    }
    total = total * (taxam / 100);
    alert(total);
}
2
simonzack 16 Дек 2015 в 08:23

Вы должны разобрать строковые переменные в число:

function tax() {

var price = [10];
var quant = [10];
var taxam = 18;
var total = 0;

 for(i=0;i<10;i++) {

    quant[i] = Number(prompt("Insert Quantity: "));

    price[i] = Number(prompt("Insert Price: "));

    }

for(i=0;i<10;i++) {

total += price[i] * quant[i];

 }

total = total * (taxam / 100);

alert(total);


}
tax()
-1
Daniel 976034 16 Дек 2015 в 08:15

Во-первых, JavaScript это не Java;)

Кажется, вы пытаетесь инициализировать ваши массивы длиной 10. Это работает в Java, но в Javascript массив динамический и записывает:

myArray = [10];

Просто установит значение 10 в первом индексе массива.

Затем, когда вы предложите пользователю ввести числа, числа будут интерпретироваться как строка. Так что было бы хорошо привести его в число, прежде чем работать с ним. Чтобы бросить это:

var value = '10000';
valueAsInt = parseFloat('10000',10);
//or simply 
valueAsInt = +value;

Теперь мы подошли к вашей проблеме, так как total не инициализирован, первое влияние будет

undefined += n;

Это даст NaN.

Так что просто инициализируйте total перед его использованием:

var total = 0;
0
ylerjen 16 Дек 2015 в 08:23

Я думаю, с этим var price = [10] вы пытались создать массив с 10 числами, но это не так, как это работает в Javascript var price = [10] даст вам массив с 10 в 0-й позиции. Единственный другой трюк, который я хотел бы сделать, - это сделать var price = [1,2,3,4,5,6,7,8,9,10], чтобы на самом деле добиться того, на что вы нацелены изначально

1
Ade 16 Дек 2015 в 08:16

Сначала нужно инициализировать итоговую переменную, потому что она изначально не определена

var total = 0;
0
ojus kulkarni 16 Дек 2015 в 08:25