You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

按揭贷款可贷额度计算器计算异常排查及修复求助

按揭贷款计算器问题排查与修复方案

核心错误点

  • PMT函数公式符号错误:现行公式分母使用(-1 + q),与标准年金还款额公式要求的(1 - q)不符,会导致计算出的月还款额为负数,输出异常。
  • 输入值校验缺失:未判断年收入、首付输入是否为有效数字,当用户输入非数字内容、仅填写单一项时,parseFloat会返回NaN,后续计算全部失效,页面会显示£NaN。
  • 无条件执行格式化逻辑:无论用户是否完成两项输入,都会强制对房产价值、月还款额做格式化输出,未输入时会错误展示£0而非留空或提示。
  • 输入触发逻辑缺陷:仅绑定keyup事件,若用户通过粘贴、自动填充等方式输入内容,可能无法触发计算。

修复后完整代码

function PMT (rate_per_period, number_of_payments, present_value, future_value, type ) {
        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)));
}

jQuery(document).ready(function ($) {
        // 补充input事件,兼容粘贴、自动填充场景
        $(".input").on('keyup input', function () {
            var annualIncomeInput = $('#annualIncome').val().trim();
            var depositInput = $('#deposit').val().trim();
            var annualIncome = 0;
            var deposit = 0;
            var mortgage = 0;
            var propertyValue = 0;
            var monthlyPayments = 0;

            // 清空千分位符号后转数字
            annualIncome = parseFloat(annualIncomeInput.replace(/,/g, ''));
            deposit = parseFloat(depositInput.replace(/,/g, ''));

            // 校验输入有效性,任意一项不合法则清空结果
            if (isNaN(annualIncome) || isNaN(deposit) || annualIncome <= 0 || deposit <= 0) {
                $('#totalHowMuchCanIBorrow').text('');
                $('#estimatedCosts').text('');
                return;
            }

            if ((deposit / 0.1 - deposit) >= (annualIncome * 4.5)) {
                mortgage = annualIncome * 4.5;
                propertyValue = mortgage + deposit;
            } else {
                propertyValue = deposit / 0.1;
                mortgage = propertyValue - deposit;
            }
            monthlyPayments = PMT(0.0307/12, 30*12, mortgage, 0, 0).toFixed(2);
            
            // 仅有效输入时更新展示结果
            $('#totalHowMuchCanIBorrow').text('£' + parseFloat(propertyValue).toLocaleString());
            $('#estimatedCosts').text('£' + parseFloat(monthlyPayments).toLocaleString());
        })
    })

内容的提问来源于stack exchange,提问作者Elisabeta Aionese

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 18:15:08