按揭贷款可贷额度计算器计算异常排查及修复求助
按揭贷款计算器问题排查与修复方案
核心错误点
- 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
相关产品推荐
相关产品推荐

