Математическая функция JavaScript не работает и возвращает Nan - PullRequest
0 голосов
/ 12 октября 2018

Я создал математическую функцию, которая не работает.Когда я вызываю функцию из другой функции, она возвращает NaN вместо числа.

Блок кода в функции «вычисления» прекрасно работает вне функции, когда я объявляю переменные, но это должно бытьдобавлены в качестве параметров, когда я вызываю его как функцию.

Может кто-нибудь сказать мне, почему не работает функция «вычисления»?

function gatherInfo() {
    var clientAge = document.getElementById('clientAge').value;
    var propertyValue = document.getElementById('propertyValue').value;
    var OSmortgage = document.getElementById('OSmortgage').value;
    calculate(clientAge, propertyValue, OSmortgage);
}

var subButton = document.getElementById('subButton');
subButton.addEventListener('click', gatherInfo, false);


function calculate(clientAge, propertyValue, OSmortgage) {
    var ageArray = [];
    var i;
    for (i = 55; i < 96; i++) {
        ageArray.push(i);
    }
    var percentArray = [25.6, 26.6, 27.6, 28.6, 29.6, 32.5, 33.5, 34.5, 35.5, 36.5, 37.5, 38.5, 39.5, 40.5, 41.5, 42.5, 43.2, 44.4, 45.6, 46.8, 48, 49.2, 50.4, 51, 51.5, 52, 52.5, 53, 53.5, 54, 54, 54, 54, 54, 54, 55, 55, 55, 55, 55, 55];

    var ageIndex = ageArray.indexOf(clientAge);
    var percentage = percentArray[ageIndex];
    var amount = ((propertyValue - OSmortgage) / 100) * percentage;
    result(amount, clientAge);
}


function result(amount, clientAge) {

    var result = document.getElementById('result');
    if (clientAge < 55) {
        result.textContent = 'You do not qualify for equity release.';
    } else {
        result.textContent = 'You could release £' + amount + ' of your property\'s value.';
    }
}

Мой HTML-код:

<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Equity Release Calculator</title>
</head>

<body>
    <h1>Equity Release Calculator</h1>

    <form id="form" method="get">

        <p>Age
        <input type="number" id="clientAge" required="required"> 
        </p>

        <p>Property value
        <input type="number" id="propertyValue" required="required">    
        </p>       

        <p>Outstanding mortgage amount
        <input type="number" id="OSmortgage" required="required">    
        </p>

        <p>Submit
        <input type="button" id="subButton" value="Get my quote">    
        </p>       

    </form>


    <p id="result"></p>

</body>
<script src="script.js" type="text/javascript"></script>   
</html>

Ответы [ 3 ]

0 голосов
/ 12 октября 2018

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

var ageIndex = ageArray.indexOf (parseFloat (clientAge));var процент = процентное массив [parseFloat (ageIndex)];переменная сумма = ((parseFloat (propertyValue) - parseFloat (OSmortgage)) / 100) * parseFloat (процент);

function gatherInfo() {
debugger
    var clientAge = document.getElementById('clientAge').value;
    var propertyValue = document.getElementById('propertyValue').value;
    var OSmortgage = document.getElementById('OSmortgage').value;
    calculate(clientAge, propertyValue, OSmortgage);
}

var subButton = document.getElementById('subButton');
subButton.addEventListener('click', gatherInfo, false);


function calculate(clientAge, propertyValue, OSmortgage) {
    var ageArray = [];
    var i;
    for (i = 55; i < 96; i++) {
        ageArray.push(i);
    }
    var percentArray = [25.6, 26.6, 27.6, 28.6, 29.6, 32.5, 33.5, 34.5, 35.5, 36.5, 37.5, 38.5, 39.5, 40.5, 41.5, 42.5, 43.2, 44.4, 45.6, 46.8, 48, 49.2, 50.4, 51, 51.5, 52, 52.5, 53, 53.5, 54, 54, 54, 54, 54, 54, 55, 55, 55, 55, 55, 55];

    var ageIndex = ageArray.indexOf(parseFloat(clientAge));
    var percentage = percentArray[parseFloat(ageIndex)];
    var amount = ((parseFloat(propertyValue) - parseFloat(OSmortgage)) / 100) * parseFloat(percentage);
    alert("amount " + amount);
}


function result(amount, clientAge) {

    var result = document.getElementById('result');
    if (clientAge < 55) {
        result.textContent = 'You do not qualify for equity release.';
    } else {
        result.textContent = 'You could release £' + amount + ' of your property\'s value.';
    }
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<h1>Equity Release Calculator</h1>

    <form id="form" method="get">

        <p>Age
        <input type="number" id="clientAge" required="required"> 
        </p>

        <p>Property value
        <input type="number" id="propertyValue" required="required">    
        </p>       

        <p>Outstanding mortgage amount
        <input type="number" id="OSmortgage" required="required">    
        </p>

        <p>Submit
        <input type="button" id="subButton" value="Get my quote">    
        </p>       

    </form>


    <p id="result"></p>
0 голосов
/ 12 октября 2018

Используйте parseint или parsefloat для всех переменных:

var ageIndex = ageArray.indexOf(parseFloat(clientAge)); 
var percentage = percentArray[parseFloat(ageIndex)]; 
var amount = ((parseFloat(propertyValue) - parseFloat(OSmortgage)) / 100) * parseFloat(percentage);
0 голосов
/ 12 октября 2018

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

Вам нужно добавить «возврат» к этой функции, чтобы получить доступ к выходу.

например

function calculate(clientAge, propertyValue, OSmortgage) {
    var ageArray = [];
    var i;
    for (i = 55; i < 96; i++) {
        ageArray.push(i);
    }
    var percentArray = [25.6, 26.6, 27.6, 28.6, 29.6, 32.5, 33.5, 34.5, 35.5, 36.5, 37.5, 38.5, 39.5, 40.5, 41.5, 42.5, 43.2, 44.4, 45.6, 46.8, 48, 49.2, 50.4, 51, 51.5, 52, 52.5, 53, 53.5, 54, 54, 54, 54, 54, 54, 55, 55, 55, 55, 55, 55];

    var ageIndex = ageArray.indexOf(clientAge);
    var percentage = percentArray[ageIndex];
    var amount = ((propertyValue - OSmortgage) / 100) * percentage;

    return amount;
}
...