Nano Hash - криптовалюты, майнинг, программирование

Функция Excel PMT в JS

Я нашел небольшой фрагмент в Интернете о расчете PMT.

function PMT(i, n, p) {
 return i * p * Math.pow((1 + i), n) / (1 - Math.pow((1 + i), n));
}
function CalculatePMTFromForm(idLoanAmount, idAnnualInterestRate, idMonths, idResult) {
 var i = jQuery('#' + idAnnualInterestRate).val() / 1200;
 var n = jQuery('#' + idMonths).val();
 var p = jQuery('#' + idLoanAmount).val();
 var pmt = PMT(i, n, -p);
jQuery('#' + idResult).val(pmt.toFixed(2));
}
function performCalc() {
 CalculatePMTFromForm('LoanAmount', 'InterestRate', 'Months', 'Payment');
}
jQuery(document).ready(function() { performCalc(); jQuery('.calc').keyup(performCalc); });

Когда страница загружается, в поле ввода результата я вижу «NaN», а когда я набираю какой-то нерелевантный номер, появляется сообщение «-Infinity». Я ищу «NaN» в файлах и нашел в jquery.js, но после изменения ничего не меняется. И я не могу найти Бесконечность

Как я могу изменить эти сообщения?

Изменить

Телефонный код:-

function performCalc() {
  CalculatePMTFromForm('LoanAmount', 'InterestRate', 'Months', 'Payment');
}

jQuery(document).ready(function() {
  performCalc(); jQuery('.calc').keyup(performCalc);
});

Это сработало для меня:

if(pmt>0 && pmt<Number.MAX_VALUE) {jQuery('#' + idResult).val(pmt.toFixed(2));}
19.01.2010

  • Покажите нам вызов CalculatePMTFromForm? 19.01.2010
  • function PerformCalc() { CalculatePMTFromForm('Сумма займа', 'Процентная ставка', 'Месяцы', 'Платеж'); } jQuery(document).ready(function() { PerformCalc(); jQuery('.calc').keyup(performCalc); }); 20.01.2010
  • И вы уверены, а) что каждый из рассматриваемых элементов INPUT имеет правильный идентификатор (и этот идентификатор не дублируется) и б) каждый INPUT имеет начальное значение, предоставленное сервером. 20.01.2010
  • а) ДА, б) Нет начального значения, но если я установлю, например, 0, то NaN исчезнет. Но пользователь может удалить значение 0 из поля ввода, поэтому NaN снова отображается. Каким-то образом мне нужно изменить это сообщение, или я должен проверить, является ли значение поля ввода результата NaN, тогда я должен указать другое значение.. просто я не знаю, как это сделать.. 20.01.2010
  • Привет, кто-нибудь может сказать мне, какой пост является ответом на этот вопрос. Я читаю все посты, но не могу понять, какой из них будет ответом для реализации в моем проекте. 10.01.2012

Ответы:


1

Этот вопрос мертв уже более года, но недавно мне нужно было сделать то же самое. Вот что я придумал:

function pmt(rate_per_period, number_of_payments, present_value, future_value, type){
    if(rate_per_period != 0.0){
        // Interest rate exists
        var q = Math.pow(1 + rate_per_period, number_of_payments);
        return -(rate_per_period * (future_value + (q * present_value))) / ((-1 + q) * (1 + rate_per_period * (type)));

    } else if(number_of_payments != 0.0){
        // No interest rate, but number of payments exists
        return -(future_value + present_value) / number_of_payments;
    }

    return 0;
}

type должно быть 1 или 0, как в Excel. rate_per_period должно быть десятичным числом (например, 0.25, а не 25%).

Пример:

/* Example: */
var interest    = 0.07,     // Annual interest
    years       = 5,        // Lifetime of loan (in years)
    present     = 10000,    // Present value of loan
    future      = 20000,    // Future value of loan
    beginning   = 1;        // Calculated at start of each period

var payment = -pmt(interest / 12,   // Annual interest into months
                   years * 12,      // Total months for life of loan
                   present,
                   future,
                   beginning);

А оплата за примерный период (месяц) составляет ~$474,60.

Обратите внимание на отрицание результата, так как сумма является вычетом, то есть: стоит вам 474 доллара - результат является отрицательным значением. Если бы результат был кредитным, результат был бы положительным. Как правило, вы хотите сохранить его как отрицательное/положительное, но если вы отображали его в формате, подобном Total Debt: $XYZ, вы хотели бы преобразовать его в положительное.

22.05.2011
  • Спасибо из будущего. Это 2015 год, ноябрь, и Марти Макфлай уже здесь. 16.11.2015

  • 2

    NaN означает «не число».

    Убедитесь, что вы проверяете каждое входное значение, является ли оно числовым. Если это не так, выведите сообщение об ошибке или установите его на 0, в зависимости от того, важно ли это для вашего расчета или нет.

    Хорошая коллекция лучших способов проверить значение на предмет того, является ли оно числовым, - это вопрос SO: Проверка чисел в JavaScript - IsNumeric()

    19.01.2010
  • я действительно не понимаю. Даже если я проверю правильность полей ввода, пользователь может написать неправильный формат, просто получить сообщение для ввода номера или smtng ... Но пока пользователь не может ввести неправильный символ, он получит сообщение в поле ввода результата NaN. Я проверю поле ввода, но мне нужно как-то отключить сообщение NoN и Infinity. 20.01.2010

  • 3

    Попробуйте так: -

    function CalculatePMTFromForm(idLoanAmount, idAnnualInterestRate, idMonths, idResult) {
     var i = parseFloat($('#' + idAnnualInterestRate).val()) / 1200;
     var n = parseFloat($('#' + idMonths).val());
     var p = parseFloat($('#' + idLoanAmount).val());
     var pmt = PMT(i, n, -p);
     $('#' + idResult).val(pmt.toFixed(2));
    }
    

    .val(), вероятно, возвращает строковый тип, а не числовой тип.

    19.01.2010
    Новые материалы

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

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

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

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

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..