zdravím, prosím o radu mám daňovou kalkulačku, zadání je takovéto
Vytvořte program, který z údajů za uplynulý rok spočte daň. Ve virtualní zemi Bohemland je uzákoněno progresivní danění příjmů. Jedinou odečitatelnou položkou je bezúplatné darování krve nebo krevních derivátů (max. 12 za rok).
daň nemůže být záporná
výpočet se provádí tak, že se sečtou příjmy za uplynulý rok a od této sumy se odečte daňová úleva (pdk * 4000)
tím vznikne daňový základ - ten se pak progresivně daní
z částky do (12 * 20 000) je sazba 15 %,
z částky do (12 * 40 000) je sazba 25 %,
z částky nad (12 * 40 000) je sazba 35 %
daň se nemůže měnit skokově, tj. např. u hrubého platu 22 000 bez úlev se 25 % platí jen z částky 12 * 2 000 a ze zbývajících 12 * 20 000 se platí jen 15 %
po rozpočítání daně na jednotlivé měsíce a odečtení od průměrné hrubé mzdy obdržíte průměrný čistý příjem
Když zadám jen příjem bez počtu darování krve tak to funguje, funguje i když se zadá krev u částky do 20000 za měsíc platu, ale dále to háže špatné výsledky. Nevíte prosím co tam mám špatně?
package javaapplication3;
import java.util.Scanner;
import java.util.Locale;
/**
*
* @author tomasek
*/
public class JavaApplication3 {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("Zadejte prumerny hruby prijem (celkovy vydeleny 12) za uplynuly rok (double): ");
double prijem = sc.nextDouble();
System.out.println("Dekuji za zadani.");
if (prijem < 0)
prijem = 0;
System.out.println("Pokud jste zadali zaporne cislo, bylo upraveno na 0.0! ");
System.out.println("");
System.out.println("Zadejte pocet darovani krve za uplynuly rok - max. 12 za rok (int): ");
int krev = sc.nextInt();
System.out.println("Dekuji za zadani.");
if (krev < 0)
krev = 0;
if (krev > 12)
krev = 12;
System.out.println("Pokud jste zadali vice nez 12, bude upraveno na 12! ");
System.out.println("Pokud jste zadali zaporne cislo, bude upraveno na 0! ");
System.out.println("");
System.out.println("Vsechny ciselne vysledky vypisuji pomoci prikazu:\n" +
"\"System.out.printf(Locale.US, \"%20.2f%n\", (double) prom);\"");
System.out.println("");
System.out.println("Od nasledujiciho radku se bude vystup znak\n" +
"po znaku porovnavat se vzorovym resenim!");
double prijemZaRok = 12*prijem;
double danZaklad = prijemZaRok-krev*4000;
double danZaklad1;
double danZakladNad20;
double danZakladNad40;
if (danZaklad < 0)
danZaklad = 0;
if (danZaklad<=240000)
{danZaklad1 = danZaklad;
danZakladNad20 = 0;
danZakladNad40 = 0;
}
else
if (danZaklad<=480000)
{danZaklad1 = 240000;
danZakladNad20 = danZaklad-240000;
danZakladNad40 = 0;
}
else
{danZaklad1 = 240000;
danZakladNad20 = 240000;
danZakladNad40 = danZaklad-480000;
}
double vypoctenaDan = (danZaklad1*15+danZakladNad20*25+danZakladNad40*35)/100;
double mzdaCelk = prijem - vypoctenaDan/12;
System.out.println("---Vysledky---");
System.out.println("Celkovy zaklad dane za uplynuly rok:");
System.out.printf(Locale.US, "%20.2f%n", (double) danZaklad);
System.out.println("Souhrna vypoctena dan za uplynuly rok:");
System.out.printf(Locale.US, "%20.2f%n", (double) vypoctenaDan);
System.out.println("Prumerny cisty mesicni prijem za uplynuly rok:");
System.out.printf(Locale.US, "%20.2f%n", (double) mzdaCelk );
// TODO code application logic here
}
}