2014-02-15 38 views
-4

對輸入的工資的前20%沒有徵稅。即20000美元,其中15000美元的稅率爲10%,其餘1000美元的稅率爲20%,稅率爲1700美元。我的程序錯誤輸出14500 ....當找到工資稅時,我的Java程序輸出了錯誤的答案

import java.util.*; 
public class taxable { 


    public static void main (String[] args) { 
    Scanner in=new Scanner(System.in); 

    System.out.println("Enter your salary:"); 
    double salary=in.nextDouble(); 
    double taxDue=0; 
    double tempTaxDue=0; 
    if (salary < 15000) { 
    System.out.println("No tax applicable"); 
    }else if 
    (salary >=15000 && salary <20000) { 
    taxDue=(15000*0.1); 
    }else if 
    (salary >=20000 && salary <=35000) { 
    tempTaxDue=(salary*0.8); 
    taxDue=15000*0.1+tempTaxDue-15000*0.2; 
    }else if 
    (salary > 35000) { 
    tempTaxDue=salary*0.8; 
    taxDue=(15000*0.1)+(20000*0.2)+(tempTaxDue-35000*0.35); 
    taxDue=(salary*0.8)+(20000*0.2)+(salary-35000*0.35); 
    } 
    System.out.printf("The amount of tax due is: " + taxDue + " "); 
    double avTaxRate; 
    avTaxRate=taxDue/salary*100; 
    System.out.printf("The average tax rate: " + avTaxRate + "%%"); 

} 


} 

回答

2

當將整數值,總是檢查浮點除法 - 10/1000通過Java的整數除法計算,10.0/100割禮這一點。

+0

我改變了代碼(工資> = 15000 &&工資<20000){taxDue = 15000 * 0.1;我仍然得到錯誤的答案... – user3314485

+0

你確定你提供了上面的整個代碼嗎? – Smutje

+0

我只是把整個代碼放在那裏。儘管編譯沒有錯誤。 – user3314485

2

要得到10%的東西,除以10.0或乘以0.1

taxDue = 15000 * 0.1; 

但是這裏最大的隱藏問題是你不應該用雙倍來代表金錢。改爲使用BigDecimal

爲什麼?爲了好玩,讓我們計算15001的10%稅嗎?

double dValue = 15001; 
double dTaxes = 15001 * 0.1; 
System.out.println("Taxes with double: " + dTaxes); 

// Taxes with double: 1500.1000000000001 

精度錯誤 - >小,但它有0.0000000000001

BigDecimal救援:

BigDecimal value = new BigDecimal("15001"); 
BigDecimal taxes = value.multiply(new BigDecimal("0.1")); 
System.out.println("Taxes with BigDecimal: " + taxes); 

// Taxes with BigDecimal: 1500.1 

Working example

+0

發現'double'而不是'BigDecimal'的好工作。+1 – christopher

+0

我將代碼更改爲(salary> = 15000 && salary <20000){ \t taxDue = 15000 * 0.1);我仍然得到了錯誤的答案... – user3314485

+0

然後你在其他地方有問題。調試器是你的朋友。 –

0

你必須使用,當你想分配給雙可變某些部門,而不是鑄造:

taxDue=15000*(10/100);

SMT爲使除數雙重價值之一:

taxDue = 15000.0 * (10.0/100);

+0

我將代碼更改爲(salary> = 15000 && salary <20000){taxDue = 15000 * 0.1;我仍然得到錯誤的答案... – user3314485

相關問題