// 題目邏輯:輸入值 在 平均工資*40% 以下 → 按 40% 計算
// 代碼寫法:
if (show * 40 / 100 <= input1) { // 錯誤!
sl = show * 40 / 100 * input5 / 100;
} else if (input1 * 300 / 100 >= 20838) { // 邏輯也反了
// ...
}
不等號方向搞反了。
show = 平均工資 (題目隱含)input1 = 用戶輸入的稅前收入input1 <= show * 40 / 100 (即 show * 40 / 100 >= input1)show * 40 / 100 <= input1 含義是:**平均工資40% ≤ 用戶收入**,恰好相反。var avgSalary = show; // 平均工資
var income = parseFloat(input1) || 0; // 用戶輸入收入
var rateLow = input5 / 100; // 低比例費率
var rateHigh = input6 / 100; // 高比例費率
var base, sl, dl;
if (income <= avgSalary * 0.4) {
// 情況1:收入 ≤ 平均工資40% → 基數 = 平均工資40%
base = avgSalary * 0.4;
} else if (income >= avgSalary * 3) {
// 情況2:收入 ≥ 平均工資300% → 基數 = 平均工資300% (封頂)
base = avgSalary * 3;
} else {
// 情況3:介於兩者之間 → 基數 = 實際收入
base = income;
}
sl = base * rateLow; // 如養老保險
dl = base * rateHigh; // 如醫療保險
$('#input3').val(sl.toFixed(2)); // 顯示結果,保留2位小數
| 業務規則 | 正確代碼條件 | 原代碼錯誤 |
|---|---|---|
| 收入 ≤ 平均工資×40% | income <= avg * 0.4 | 寫成 avg*0.4 <= income (反了) |
| 收入 ≥ 平均工資×300% | income >= avg * 3 | 寫成 income*3 >= avg (邏輯錯亂) |
| 中間區間 | else | 條件順序錯導致進不去 |
avgSalary, userIncome, lowerCap, upperCap,一眼看懂業務含義。var lowerBound = avgSalary * 0.4; 避免重複計算且易閱讀。base, sl, dl 確認計算鏈路正確。**核心錯誤:不等號方向反了,導致業務邏輯完全相反。** 修正條件判斷方向,提取邊界變量,按「低-中-高」順序寫 if-else if-else,即可得到正確計算結果。