2015-06-24 3 views
-2

Когда этот код работает, он выводит «Годовой баланс счета за год (i) = 100» на каждый год. Ясно, что ответ не должен быть 100 каждый раз, но я не вижу, что я делаю неправильно в уравнении.Javascript Ежегодный процентный процентный расчет

var invest; 
var rate; 
var amount; 

rate = 0.08; 
invest = 100,000; 

    for(var i=1;i<=10;i++){ 
     amount = ((parseInt(invest)) * (1.0 + (parseInt(rate)) * (parseInt(i)))) 
     document.write("Annual Account Balance for Year " + i + " = " + amount + "<br>"); 
    } 
+2

Примечание '100 000' оценивает' 100' и ​​возвращает '000', что является синтаксической ошибкой в ​​строгом режиме (может быть' 0' в нестрогом режиме). – Oriol

+1

Оценить, инвестировать, и я не строки .. почему вы их разбираете? –

ответ

1

Вместо вызова parseInt(rate), вам нужно называть parseFloat(rate) - хотя в соответствии с вашим кодом, эти цифры - поэтому они не должны быть разобраны независимо.

parseInt будет анализировать целое число из строки (хотя оно все равно будет иметь тип «Номер»). В этом случае он фактически возвращает 0 вместо 0.08, который вы хотите использовать. Вызов parseInt на номер преобразует его из числа в строку, а затем обратно ... Что по сути бесполезно.

Кроме того, как заявила Ориол, вы не можете добавлять запятые к номерам в JavaScript.

+1

Зачем нужен 'parseFloat'? Они уже цифры. 'parseFloat' сначала преобразует числа в строки, а затем проанализирует их на числа. – Oriol

+0

Я только что поймал это и добавил его в мое редактирование. – johnnyRose

0

parseInt(0.08) дает 0, поэтому математика ничего не делает. Вам не нужно анализировать свои переменные здесь, так как вы сами определяете их. Вам действительно нужно только анализировать, если вы читаете данные с пользовательского ввода.

Также ваша математика для интересов плоха. Вам нужно рассчитать проценты по процентам.

Этот сценарий дает правильных * выхода:

var invest; 
var rate; 
var amount; 

rate = 0.08; 
invest = 100000; 

amount = invest; 
for(var i = 1; i <= 10; i++){ 
    amount = amount * (1.0 + rate); 
    document.write("Annual Account Balance for Year " + i + " = " + amount + "<br>"); 
} 

выход:

Annual Account Balance for Year 1 = 108000 
Annual Account Balance for Year 2 = 116640.00000000001 
Annual Account Balance for Year 3 = 125971.20000000003 
Annual Account Balance for Year 4 = 136048.89600000004 
Annual Account Balance for Year 5 = 146932.80768000006 
Annual Account Balance for Year 6 = 158687.43229440006 
Annual Account Balance for Year 7 = 171382.42687795206 
Annual Account Balance for Year 8 = 185093.02102818823 
Annual Account Balance for Year 9 = 199900.4627104433 
Annual Account Balance for Year 10 = 215892.49972727877 

// this would be the output with your bad math: 

Annual Account Balance for Year 1 = 108000 
Annual Account Balance for Year 2 = 115999.99999999999 // float funny business, beware! 
Annual Account Balance for Year 3 = 124000 
Annual Account Balance for Year 4 = 132000 
Annual Account Balance for Year 5 = 140000 
Annual Account Balance for Year 6 = 148000 
Annual Account Balance for Year 7 = 156000 
Annual Account Balance for Year 8 = 164000 
Annual Account Balance for Year 9 = 172000 
Annual Account Balance for Year 10 = 180000 

* Так как мы имеем дело со значениями с плавающей точкой здесь быть очень осторожен, это ограниченная точность.

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