代碼冗長、硬編碼利率、重復綁定 change 事件、NaN 錯誤。
o1 數組對象中,含 name(標識)、rate(利率)、days(天數)。calculate() 函數。getDays() 解析期限標識、calcTime() 計算到期日、gross_interest() 計算利息。parseFloat(val) || 0 防 NaN,replace(/-/g, '/') 兼容日期格式。function getDays() {
var val = $("#sel2").find("option:selected").attr("name") || 'd0';
var c1 = val.charAt(0), c2 = parseInt(val.charAt(1));
return c1=='d'?c2 : c1=='m'?30*c2 : 365*c2;
}
function calculate() {
var day = getDays();
var input1 = parseFloat($("#input1").val()) || 0;
var nl3 = parseFloat($("#nl3").val()) || 0;
var nl4 = parseFloat($("#nl4").val()) || 0;
var lj = nl4>0 ? input1*(day/360)*(nl4/100)*(nl3/100) : input1*(day/360)*(nl3/100);
$("#lj").val(lj.toFixed(2));
$("#lj1").val((input1+lj).toFixed(2));
$("#lj2").val("0.00");
calcTime();
}
// 所有輸入綁定 change 輸入事件觸發 calculate
$("#sel1,#sel2,#input1,#nl3,#nl4").on("change input", calculate);
代碼從 300+ 行壓縮至 80 行,邏輯清晰、易維護、擴展新幣種/期限只需修改配置數組。