2013-02-15 81 views
0

我已經得到了這段代碼,它可以計算員工工資的月度稅。當我運行它時,似乎一切正常,直到if子句中的點。C算法不評估

如果我提供basicSalary爲50000和所有其他的輸入值爲0,monthlyTax圖來自零點的時候應該是4000左右。

任何人可以解釋我爲什麼發生這種情況?

#include <stdio.h> 

int main() 
{ 
    int basicSalary, allowances, transportAllowance, numberOfDependants, deduction; 
    float monthlyTax, income; 

    printf("Enter Basic Salary Amount: "); 
    scanf("%d", &basicSalary); 

    printf("\nEnter Allowances Amount: "); 
    scanf("%d", &allowances); 

    printf("\nEnter transportAllowance Amount: "); 
    scanf("%d", &transportAllowance); 

    printf("\nEnter Number Of Dependants: "); 
    scanf("%d", &numberOfDependants); 

    switch (numberOfDependants) 
    { 
      case 0: 
       deduction = 215000; 
       break; 
      case 1: 
       deduction = 325000; 
       break; 
      case 2: 
       deduction = 415000; 
       break; 
      case 3: 
       deduction = 475000; 
       break; 
      default: 
        printf("Number Of Dependants Can Only Be Between 0 - 3, Enter A Proper Value."); 
        return 1; 
    } 

    income = basicSalary * 13 + allowances + (transportAllowance - 6800) * 12 - deduction; 

    if (income < 500000) 
    { 
     monthlyTax = ((15/100) * (income/12)); 
    } 
    else 
    { 
     monthlyTax = ((15/100) * (500000/12)) + ((30/100) * ((income-500000)/12)); 
    } 

    monthlyTax = monthlyTax/12; 

    printf("\nMothly Tax Amount is %f", monthlyTax); 
    getch(); 

    return 0; 
} 
+3

這對被看中並使用'15/100',而不是更 「接地」'0.15'; - ) – dasblinkenlight 2013-02-15 18:08:00

+1

而在C中,它應該是'int main(void)',因爲'()'在參數聲明中不等於'(void)'。哦,請停止在行首開始印刷換行的疾病;它們屬於打印行的末尾。 – Jens 2013-02-15 18:09:47

+0

謝謝你們倆! :) @dasblinkenlight - yup,太有趣了:P – Hirvesh 2013-02-15 18:11:34

回答

6

在C中,15/100等於0,因爲它是整數除法

原作者可能是指浮點除法15.0/100.0

一般來說,浮點計算中隱含的所有常量也應該是浮點類型(即附加.0),除非你真的知道你在做什麼。這適用於所有數字,而不僅僅是分部中的數字,以保證安全。

如果不是常量而是整型變量,你可能需要一個轉換:

(float)basicSalary ... 

而且順便說一句,很多的變量,如basicSalary,也應該是float類型。

作爲最後一條建議,除非您有特定需求,否則通常建議默認情況下在任何地方都使用double而不是float

2

這是由整數除法造成

monthlyTax = ((15/100) * (income/12)); 

這裏,15/100不計算爲0.15,而是0(十進制部分剝離)。

更改公式中使用浮點值:

monthlyTax = ((15/100.f) * (income/12.f)); 

monthlyTax = ((15/100.0) * (income/12.0)); 
+0

我不認爲'100f'是一個有效的C表達式。你應該說'100.0f'。 – rodrigo 2013-02-15 18:34:39

+0

@ rodrigo:謝謝,你說得對。 – knittl 2013-02-15 19:35:04