首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

JavaScript 稅費計算邏輯錯誤:if 條件判斷方向搞反了

     編輯:程式設計疑難解答

問題代碼分析

// 題目邏輯:輸入值 在 平均工資*40% 以下 → 按 40% 計算
// 代碼寫法:
if (show * 40 / 100 <= input1) { // 錯誤!
    sl = show * 40 / 100 * input5 / 100;
} else if (input1 * 300 / 100 >= 20838) { // 邏輯也反了
    // ...
}

邏輯錯誤核心

不等號方向搞反了。

  • show = 平均工資 (題目隱含)
  • input1 = 用戶輸入的稅前收入
  • 題目意圖:用戶收入 ≤ 平均工資 × 40% 時,按 40% 基數計算。
  • 正確條件: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條件順序錯導致進不去

防錯建議

  1. 變量命名語義化: avgSalary, userIncome, lowerCap, upperCap,一眼看懂業務含義。
  2. 提取邊界值變量: var lowerBound = avgSalary * 0.4; 避免重複計算且易閱讀。
  3. 單元測試關鍵節點: 測試收入 = 0、=下限、=上限、=中間值、超上限 5 個邊界點。
  4. console.log 中間值: 調試時打印 base, sl, dl 確認計算鏈路正確。

總結

**核心錯誤:不等號方向反了,導致業務邏輯完全相反。** 修正條件判斷方向,提取邊界變量,按「低-中-高」順序寫 if-else if-else,即可得到正確計算結果。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved