0

従業員の給与の毎月の税金を計算するこのコードを入手しました。実行すると、if 句のポイントまではすべて正常に動作しているように見えます。

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;
}
4

2 に答える 2

6

C では、整数除算であるため、15 / 100等しい。0

原作者はおそらく浮動小数点除算を意味し15.0 / 100.0ます。

一般的に言えば、浮動小数点計算で暗示されるすべての定数も浮動小数点型である必要があります (つまり、 が.0追加されている必要があります)。安全のために、それはディビジョン内の数字だけでなく、すべての数字に当てはまります。

それらが定数ではなく整数変数である場合は、キャストが必要になる場合があります。

(float)basicSalary ...

ところで、 などの多くの変数basicSalaryも 型である必要がありますfloat

最後のアドバイスとして、特定の必要がない限り、デフォルトdoubleでどこでも使用するのではなく、通常は使用することをお勧めします。float

于 2013-02-15T18:06:25.720 に答える
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));
于 2013-02-15T18:07:13.700 に答える